为什么这个正则表达式不能用于匹配C整数声明?

时间:2013-05-18 16:17:22

标签: regex grep

我正在使用以下正则表达式来匹配C整数声明而不进行初始化。整数可能是无符号的:

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

第一部分匹配unsigned后跟多个空格,或者什么都没有。第二部分匹配int后跟空格,加上变量名和分号。

不幸的是,这似乎与任何没有unsigned的整数声明都不匹配。我究竟做错了什么? ^$模式中的(...|...)是否符合我的预期(匹配空字符串)? Google和我的正则表达式手册没有帮助。

1 个答案:

答案 0 :(得分:2)

试试这个:

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

要使某个组可选,请在其后添加?^$与匹配中间的空字符串不匹配,它匹配完全空字符串 - ^匹配字符串的开头,$匹配字符串的结尾字符串。