我试图扫描给定的字符串的数字。该号码不能在“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