NSRegularExpression行为怪异(正则表达式是正确的)

Mor*_*eu5 4 regex objective-c ios nsregularexpression

我有这个正则表达式

([0-9]+)\(([0-9]+),([0-9]+)\)
Run Code Online (Sandbox Code Playgroud)

我正在使用构造一个没有选项(0)的NSRegularExpression.该表达式应匹配字符串

1(135,252)
Run Code Online (Sandbox Code Playgroud)

并且产生三个匹配:1,135,252.现在,我已经通过debuggex.com确认表达式是正确的并且做我想要的.但是,iOS拒绝承认我的努力和以下代码

NSString *nodeString = @"1(135,252)";
NSArray *r = [nodeRegex matchesInString:nodeString options:0 range:NSMakeRange(0, nodeString.length)];
NSLog(@"--- %@", nodeString);
for(NSTextCheckingResult *t in r) {
    for(int i = 0; i < t.numberOfRanges; i++) {
        NSLog(@"%@", [nodeString substringWithRange:[t rangeAtIndex:i]]);
    }
}
Run Code Online (Sandbox Code Playgroud)

坚持说

--- 1(135,252)
135,252
13
5,252
5
252
Run Code Online (Sandbox Code Playgroud)

这显然是错的.

思考?

Dav*_*ist 7

你的正则表达式应该是这样的

[NSRegularExpression regularExpressionWithPattern:@"([0-9]+)\\(([0-9]+),([0-9]+)\\)" 
                                          options:0 
                                            error:NULL];
Run Code Online (Sandbox Code Playgroud)

注意图案中的反斜杠.它们是必需的,因为反斜杠用于转义C中的特殊字符(例如引号),而Objective-C是C的超集.


如果您正在寻找一个方便的工具来处理正则表达式,我可以推荐模式.它很便宜,可以直接出口NSRegularExpressions.