我已经编写了一个正则表达式来匹配objc中的无参数方法,但它无法正常工作。它也使用一个参数匹配方法。
这是正则表达式:
-s*((?<RetType>.*?))s*(?<FuncName>(w+))s*{
这与所有这些方法匹配:
-(void) heyzapCheckinTapped: (id)sender {
我期望它与这个 1 参数方法不匹配,只是一个无参数的方法。
为什么在一个参数的情况下匹配所有方法签名?它不应该在":"字符之前停止吗?
提前谢谢。
这部分:
-s*((?<RetType>.*?))s*
匹配此:
-(void) heyzapCheckinTapped: (id)
这是因为在s*
之后,您立即拥有(?<FuncName>(w+))
(不确定为什么在命名捕获组中有一个捕获组),因此,.*?
将匹配任何内容,直到有空格(0 或更多)后跟w
个字符。
懒惰并不意味着它会在下一个模式的第一次出现时停止。如果可能匹配,它仍将尝试匹配。
您可以将正则表达式转换为:
-s*((?<RetType>[^)]+))s*(?<FuncName>w+)s*{
[^)]+
确保您在匹配时仍位于第一个括号中。