RegEx для совпадающих цифр, за которыми не следует определенный шаблон - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь построить регулярное выражение, чтобы соответствовать следующему стилю линий:

123 warehouse
124 token warehouse.
153token token abc123; etc. - warehouse 
223abdc token abc green warehouse 

Но не эти строки:

53red warehouse.
323 green token token etc warehouse. 

Регулярное выражение, которое я строю, использует отрицательный прогноз, нопроверка его на https://regex101.com/ соответствует всем строкам:

\d+(?!( ?red| ?green)).*(\bwarehouse\b)

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

Ответы [ 2 ]

4 голосов
/ 31 мая 2019

Ваш шаблон работает, если вы используете притяжательный квантификатор для предотвращения возврата:

\d++ вместо \d+

Это демонстрационная версия regex101 , которая является pcre, но Java regex также должна их поддерживать.

3 голосов
/ 31 мая 2019

С 123red warehouse.

Ваше регулярное выражение соответствует 1 или более цифрам 12, затем не красному или зеленому 3red, затем любому символу a space warehouse.

Добавить отрицательный прогноз сразу после первых цифр:

\d+(?!\d)(?! ?(?:red|green)).*(\bwarehouse\b)

DEMO

...