Java регулярное выражение для шаблона с двумя подстроками, не содержащими конкретную подстроку между - PullRequest
0 голосов
/ 25 февраля 2020

Допустим, у меня есть следующая строка: Stackoverflow is here to help you.

Мое регулярное выражение должно быть таким, чтобы is и here не содержали not между ними. Другие подстроки могут присутствовать. И not может присутствовать где-либо еще в строке.

Например:

Stackoverflow is not here to help you - не должно совпадать

Stackoverflow is here to help you - должно совпадать

Stackoverflow is always here to help you - должно совпадать

Stackoverflow is not always here to help you - не должно совпадать

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Это регулярное выражение будет работать:

^.* is((?!not).)* here .*$

Вот пример: regex101

^: устанавливает положение в начале строки

. * Соответствует любому символу

«is»: соответствует сигнальному слову «is» (с пробелами для соответствия только «is»)

((?! not).) * : соответствует всем словам, которые не являются «not»

«здесь»: соответствует сигнальному слову «здесь» (с пробелами, чтобы соответствовать только «здесь»)

. * соответствует любому символу

$ устанавливает позицию в конце строки

ОБНОВЛЕНИЕ

^.* is((?! not )( .*))* here .*$

С этим регулярным выражением вы можете указать, что regx будет работать на только «есть» и «здесь».

(. *): пусто для нового слова

Обновлен пример: regex101

0 голосов
/ 25 февраля 2020

Попробуйте это

\bis\b(\W+\b(?!not\b)\w+\b)*?\W+\bhere\b

Пояснения:

  1. \bis\b: слово соответствия равно , а не часть слова, которое будет содержать , равно
  2. (\W+\b(?!not\b)\w+\b)*?: сопоставить внутреннюю группу любое количество раз при ленивом подходе (быстрее для очень длинных предложений)
  3. `` `\ W + \ b (?! Not \ b) \ w + \ b``: внутренняя группа соответствует несловесным символам, затем начинается слово: это не может быть" not [end of word]"и читает все слово
  4. \W+\bhere\b: соответствует несловарному символу, затем слово здесь (а не то, что начиналось бы с здесь )
Stackoverflow is not here to help you does not match.
Stackoverflow is here to help you matches: at index 14 [is here]
Stackoverflow is always here to help you matches: at index 14 [is always here]
Stackoverflow is not always here to help you does not match.
Stackoverflow is notoriously here to help you matches: at index 14 [is notoriously here]
Analysis completed here does not match.
Analysis is completed here matches: at index 9 [is completed here]
Analysis is completed there does not match.
Analysis ist completed there does not match.
ishere does not match.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...