我已经编写了一个正则表达式来匹配 objc 中的无参数方法,但它也不能正常工作。它也匹配具有一个参数的方法。
这是正则表达式:
\-\s*\((?<RetType>.*?)\)\s*(?<FuncName>(\w+))\s*{
这匹配所有这些方法:
-(void) heyzapCheckinTapped: (id)sender {
我期待它不匹配这个 1 参数方法只是一个无参数的方法。
为什么它在一个参数的情况下匹配所有方法签名?它不应该在':'字符之前停止吗?
提前致谢。
我已经编写了一个正则表达式来匹配 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*{
[^)]+确保匹配时您仍在第一个括号中。