2013-05-18 60 views
0

我正在使用下面的正則表達式匹配C整數聲明沒有初始化。整數可能是無符號:爲什麼此正則表達式不適用於匹配C整數聲明?

^(unsigned[[:space:]]+|^$)int[[:space:]]+[a-zA-Z0-9_]+;$ 

第一部分匹配unsigned後跟一個數量的空格,或沒有。第二部分匹配int後跟空格,加上一個變量名和一個分號。

不幸的是,這似乎不匹配不具有它unsigned任何整數聲明。我究竟做錯了什麼? ^$(...|...)模式是否符合我的預期(匹配空字符串)?谷歌和我的正則表達式手冊沒有幫助。

+2

'^ $'匹配整行空行,因爲'$'匹配行的末尾。如果你想使'unsigned'可選,把'?'放在那個組之後。 – Barmar

+0

但是,如果我使用'(unsigned)?',它顯然也會與'garbage'匹配...... – user54609

+0

如果您將它固定在行首,則不行。 – Barmar

回答

2

試試這個:

^[[:space:]]*(unsigned[[:space:]]+)?int[[:space:]]+[a-zA-Z0-9_]+;[[:space:]]*$ 

做一團可選,把?後。 ^$與匹配中間的空字符串不匹配,它匹配完全空的字符串 - ^匹配字符串的開頭,$匹配字符串的末尾。

+0

是否需要'^'和'$'?由於縮進,我認爲它會比實際返回的匹配少。 – nhahtdh

+0

我在聲明之前和之後添加了可選空白。 – Barmar

+1

在普通的C編譯器中,您正在處理令牌流而不是線。你可以在一行上有多個聲明;你可以有一個單獨的聲明遍佈許多行。 –

相關問題