关于正则表达式在c语言中的使用问题
我在C语言中编写了一个正则表达式,来区分c语言源程序中空行、注释和代码。但是匹配代码的正则表达式会将注释也匹配到,这让我不能理解,请各位高手指教一下!这是匹配代码的正则表...
我在C语言中编写了一个正则表达式,来区分c语言源程序中空行、注释和代码。但是匹配代码的正则表达式会将注释也匹配到,这让我不能理解,请各位高手指教一下!
这是匹配代码的正则表达式:^[:blank:]*[^/].*$ 展开
这是匹配代码的正则表达式:^[:blank:]*[^/].*$ 展开
1个回答
展开全部
单看这个正则的意思是:
匹配以若干个(包括0个)空格或制表符开头,后跟一串不以”/“开头的字符。
显然这和你的要求不符。因为[^/]也可以匹配空白字符。比如:
空格//注释
你的本意是[:blank:]*匹配空格,[^/]不匹配”/“所以该行应该不匹配。
但是,实际的匹配过程没有在此打住:
正则回溯,这一次尝试[:blank:]*神马都不匹配,[^/]匹配空格,.*匹配剩余字符,于是这一行就被匹配了。
稍微改动就可以解决这个问题,^[:blank:]*[^\s/].*$其中\s匹配所有不可见字符,或许你也可以写成^[:blank:]*[^[:blank:]/].*$这种形式,再或者也可以写成只匹配注释的正则,再从不匹配的里面区分代码和空行。
匹配以若干个(包括0个)空格或制表符开头,后跟一串不以”/“开头的字符。
显然这和你的要求不符。因为[^/]也可以匹配空白字符。比如:
空格//注释
你的本意是[:blank:]*匹配空格,[^/]不匹配”/“所以该行应该不匹配。
但是,实际的匹配过程没有在此打住:
正则回溯,这一次尝试[:blank:]*神马都不匹配,[^/]匹配空格,.*匹配剩余字符,于是这一行就被匹配了。
稍微改动就可以解决这个问题,^[:blank:]*[^\s/].*$其中\s匹配所有不可见字符,或许你也可以写成^[:blank:]*[^[:blank:]/].*$这种形式,再或者也可以写成只匹配注释的正则,再从不匹配的里面区分代码和空行。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询