[英]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.