簡體   English   中英

NSRegularExpression行為怪異(正則表達式是正確的)

[英]NSRegularExpression acts weird (and the regex is correct)

我有這個正則表達式

([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的超集。


如果您正在尋找一個方便的工具來處理正則表達式,我可以推薦模式 它很便宜,可以直接輸出到NSRegularExpressions

Debuggex目前僅支持原始正則表達式。 這意味着如果您在字符串中使用正則表達式,則需要轉義反斜杠,如下所示:

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

另請注意,Debuggex(尚未)支持Objective C.這對於簡單的正則表達式可能無關緊要,但對於更復雜的正則表達式,不同的引擎會執行不同的操作。 這可能會導致一些意外行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM