使用 ICU 正则表达式查找不在括号内的数字的正则表达式问题

2024-01-13

我正在尝试扫描给定字符串中的数字。该数字不能位于“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(使用前将#替换为@)

使用 ICU 正则表达式查找不在括号内的数字的正则表达式问题 的相关文章

随机推荐