两个正则表达式之间的区别?

时间:2013-05-23 20:39:30

标签: c regex

^( *)((unsigned *int)|(int)) *[A-Za-z_][A-Za-z_0-9]* *; *((//)| *)

^ *(unsigned +)?int +[A-Za-z_][A-Za-z_0-9]* *;( *// *.*)?

正则表达式应该做的是过滤C中的有效int声明,不包括对保留关键字的检查。到目前为止,仅支持无符号修饰符。虽然顶部和底部的实现有什么区别?有没有第二个与第一个不匹配的情况?第一个是“正确”的引用。

如果有案件,请告诉我。我想先尝试自己修理它。

2 个答案:

答案 0 :(得分:5)

第一个匹配像unsignedintiforgotaboutspaces;这样的字符串。第二个没有。

我认为你没有按照$设计结束你的正则表达式。如果没有,并且您的匹配引擎尝试匹配整个字符串,那么第一个将匹配int foo; //(末尾没有空格),而第二个不匹配。

这些团体都不同,但这就是Sam已经说过的。

除此之外,我认为他们应该或多或少地以同样的方式工作。

答案 1 :(得分:1)

一些差异:

一般来说,()在匹配你的正则表达式时捕获一个组(如果你想知道究竟什么输入与parens匹配)

第一个也不需要任何空格实际存在于字符串中。

符号:*表示 0或更多
符号:+表示 1或更多