我的java @windows是:
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)
代码
Pattern.compile(".+(?<!(xxx|idea|perforator|pycharm|s).*)").matcher("xxx").matches() //returns TRUE while it should return FALSE
Pattern.compile(".+(?<!(xxx|idea|perforator|pycharm|s).*)").matcher("perforator").matches() //returns FALSE
如果字符串小于8个字符,则看起来负面的lookbehind会失败。
是错误还是我误解了正则表达式?
答案 0 :(得分:4)
Java中的Lookbehinds不能包含.*
这样的可变长度的东西,只有像交替和有限重复这样的东西。
更多信息:http://www.regular-expressions.info/lookaround.html#limitbehind
答案 1 :(得分:0)
如果您需要匹配不包含某些单词的子串(作为更大表达式的一部分),您可以使用:
(?s:(?!xxx|idea|perforator|pycharm|s).)*
如果这是您唯一要做的事情,只需反转匹配结果:
xxx|idea|perforator|pycharm|s