我正在尝试扫描给定字符串中的数字。该数字不能位于“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 正则表达式语法。
Your negative lookbehind
位置不正确。 Lookbehind 不会修改输入位置,您的negative lookbehind
应该在你之后\d{1,4}
表达:
(?i)\\d{1,4}(?<!v|vol|vol\\.|v\\.)(?![\\(]{0}.*\\))
或者,只需使用negative lookahead
为了达到同样的目的:
(?i)(?!v|vol|vol\\.|v\\.)\\d{1,4}(?![\\(]{0}.*\\))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)