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

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

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

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

4

2 回答 2

5

第一个将匹配一个字符串,如unsignedintiforgotaboutspaces;. 第二个没有。

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

这些组都是不同的,但这是 Sam 已经说过的。

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

于 2013-05-23T20:44:59.913 回答
1

一些区别:

一般来说, () 在您匹配您的正则表达式时捕获一个组(如果您想确切知道哪些输入与括号匹配)

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

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

于 2013-05-23T20:46:42.687 回答