我正在尝试扫描给定字符串中的数字。数字不能在“v/v./vol/vol.”之后,也不能在括号内。这是我所拥有的:
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./vol/vol 的否定后视断言。
\\d{1,4}
- 我要找的号码,1-4 位数字。
(?![\\(]{0}.*\\))
- 否定前瞻断言:数字不能在 ) 之前,除非它之前有 (。
令人抓狂的是,如果我去掉后视断言,它就起作用了。这里有什么问题?我正在使用 RegexKitLite,它使用 ICU 正则表达式语法。