^( *)((unsigned *int)|(int)) *[A-Za-z_][A-Za-z_0-9]* *; *((//)| *)
^ *(unsigned +)?int +[A-Za-z_][A-Za-z_0-9]* *;( *// *.*)?
正则表达式应该做的是过滤C中的有效int声明,不包括对保留关键字的检查。到目前为止,仅支持无符号修饰符。虽然顶部和底部的实现有什么区别?有没有第二个与第一个不匹配的情况?第一个是“正确”的引用。
如果有案件,请告诉我。我想先尝试自己修理它。
答案 0 :(得分:5)
第一个匹配像unsignedintiforgotaboutspaces;
这样的字符串。第二个没有。
我认为你没有按照$
设计结束你的正则表达式。如果没有,并且您的匹配引擎尝试匹配整个字符串,那么第一个将匹配int foo; //
(末尾没有空格),而第二个不匹配。
这些团体都不同,但这就是Sam已经说过的。
除此之外,我认为他们应该或多或少地以同样的方式工作。
答案 1 :(得分:1)
一些差异:
一般来说,()在匹配你的正则表达式时捕获一个组(如果你想知道究竟什么输入与parens匹配)
第一个也不需要任何空格实际存在于字符串中。
符号:*
表示 0或更多
符号:+
表示 1或更多