ios - NSRegularExpression 行为怪异(并且正则表达式是正确的)

标签 ios objective-c regex nsregularexpression

我有这个正则表达式

([0-9]+)\(([0-9]+),([0-9]+)\)

我用它来构造一个没有选项 (0) 的 NSRegularExpression。该表达式应该匹配像

这样的字符串
1(135,252)

并产生三个匹配项: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]]);
    }
}

坚持说

--- 1(135,252)
135,252
13
5,252
5
252

这显然是错误的。

想法?

最佳答案

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

[NSRegularExpression regularExpressionWithPattern:@"([0-9]+)\\(([0-9]+),([0-9]+)\\)" 
                                          options:0 
                                            error:NULL];

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


如果您正在寻找使用正则表达式的便捷工具,我可以推荐 Patterns .它非常便宜并且可以直接导出到 NSRegularExpressions

关于ios - NSRegularExpression 行为怪异(并且正则表达式是正确的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15373110/

相关文章:

ios - iOS 启动 Storyboard中的许多 id 仅显示简单的居中图像的目的是什么?

ios - 我有一个类我想要一些方法转移到数组的对象

ios - 如何在 iOS 中的 sqlite 中的一个查询中执行多个 select 语句?

JavaScript RegExp - 如何根据条件匹配单词

javascript - 仅匹配 <br> 如果直接在 </p> 之前但不直接在 </p> 之后

objective-c - DropBox 应用内登录

ios - Flutter:在权限处理程序中在IOS上添加位置权限

ios - 在哪里存储开发人员为 IOS 应用程序生成的数据

ios - 为什么在设备上运行时数据会被破坏,而在模拟器上不会?

python - 在 Python 中执行多个连续的正则表达式替换。效率低下?