【问题标题】:NSRegularExpression acts weird (and the regex is correct)NSRegularExpression 行为怪异(并且正则表达式是正确的)
【发布时间】:2013-02-28 16:01:09
【问题描述】:

我有这个正则表达式

([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... :-S 请将此作为答案发布:)

标签: ios objective-c regex nsregularexpression


【解决方案1】:

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

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

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


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

【讨论】:

    【解决方案2】:

    Debuggex 当前仅支持原始正则表达式。这意味着如果您在字符串中使用正则表达式,则需要转义反斜杠,如下所示:

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

    还要注意 Debuggex 不(还)支持 Objective C。这对于简单的正则表达式可能无关紧要,但对于更复杂的正则表达式,不同的引擎会做不同的事情。这可能会导致一些意外行为。

    【讨论】:

    • 谢谢,整个双反斜杠业务刚刚通过,因为我沮丧地不断地来回测试正则表达式。以后我会确保在我的屏幕上贴一张关于它的便利贴:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2015-10-03
    相关资源
    最近更新 更多