1

我已经编写了一个正则表达式来匹配 objc 中的无参数方法,但它也不能正常工作。它也匹配具有一个参数的方法。

这是正则表达式:

\-\s*\((?<RetType>.*?)\)\s*(?<FuncName>(\w+))\s*{

这匹配所有这些方法:

-(void) heyzapCheckinTapped: (id)sender {

我期待它不匹配这个 1 参数方法只是一个无参数的方法。

为什么它在一个参数的情况下匹配所有方法签名?它不应该在':'字符之前停止吗?

提前致谢。

4

1 回答 1

2

这部分:

\-\s*\((?<RetType>.*?)\)\s*

匹配这个:

-(void) heyzapCheckinTapped: (id) 

这是因为在\s*您拥有之后(?<FuncName>(\w+))(不确定为什么在命名的捕获组中有一个捕获组),因此,.*?它将匹配任何内容,直到后面有空格(0 或更多)后跟\w字符。

懒惰并不意味着它会在下一个模式的第一次出现时停止。如果有可能的匹配,它仍然会尝试匹配。

您可以将正则表达式转换为:

\-\s*\((?<RetType>[^)]+)\)\s*(?<FuncName>\w+)\s*{

[^)]+确保匹配时您仍在第一个括号中。

于 2013-10-03T12:04:55.750 回答