Java отрицательный взгляд за ошибка регулярных выражений? - PullRequest
1 голос
/ 15 марта 2012

Мои 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

Похоже, что отрицательный lookbehind терпит неудачу, если строка меньше 8 символов.

Это ошибка или я что-то неправильно понимаю в регулярных выражениях?

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Lookbehinds в Java не могут иметь вещи переменной длины, такие как .*, только такие вещи, как чередования и конечные повторения.

Дополнительная информация: http://www.regular -expressions.info / lookaround.html # limitbehind

0 голосов
/ 16 марта 2012

Если вам нужно сопоставить подстроки, которые не содержат некоторых слов (как часть большего выражения), вы можете использовать:

(?s:(?!xxx|idea|perforator|pycharm|s).)*

Если это единственное, что вы делаете, просто инвертируйте результат матча:

xxx|idea|perforator|pycharm|s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...