我試圖掃描給定的字符串的數字。該號碼不能在「v/v。/ vol/vol。」之後,且不能在括號內。這是我有什麼:使用ICU正則表達式查找不在括號內的數字的正則表達式問題
NSString *regex = @"(?i)(?<!v|vol|vol\\.|v\\.)\\d{1,4}(?![\\(]{0}.*\\))";
NSLog(@"Result: %@", [@"test test test 4334 test test" stringByMatching:regex]);
NSLog(@"Result: %@", [@"test test test(4334) test test" stringByMatching:regex]);
NSLog(@"Result: %@", [@"test test test(vol.4334) test test" stringByMatching:regex]);
令人生氣的是,這是行不通的。我正則表達式可以分成四個部分:
(?i)
- 讓正則表達式不區分大小寫
(?<!v|vol|vol\\.|v\\.)
- 負向後看斷言爲V/V /體積/體積。
\\d{1,4}
- 我正在查找的數字是1-4位數字。
(?![\\(]{0}.*\\))
- 負先行斷言:號碼不能被前面的),除非有一個(前
令人惱火的,如果我拿出向後看斷言,它的工作原理這裏有什麼問題。?我使用RegexKitLite,它使用正則表達式ICU語法
我注意到Java`Pattern`類中的可變寬度後視可能嚴重影響性能。儘管我還沒有使用過ICU庫,只是流口水了,所以我不知道它在那裏是否仍然如此。 – tchrist 2010-11-22 22:04:43