Регулярное выражение не должно содержать всего слова и точки - PullRequest
0 голосов
/ 27 сентября 2018

Мне нужно написать регулярное выражение, которое не должно содержать слово [apple], а также не должно содержать точек [.]

Некоторое яблоко - false

Некоторая другая строка - true

Некоторая другая строка.- ложь

Я думал о ^((?!apple).)*$, что исключает целое слово

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Использование

s.matches("(?s)(?!.*apple)[^.]*")

См. Демонстрационную версию regex (шаблон настроен для одной многострочной строки, не используйте этот шаблон в демонстрационной версии).

Регулярное выражение (?s)^(?!.*apple)[^.]*$ означает:

  • (?s) - модификатор Pattern.DOTALL, который позволяет . соответствовать любому символу, включая символ новой строки
  • ^ - началоstring (неявно в .matches())
  • (?!.*apple) - отрицательный прогноз, который непосредственно справа от текущего местоположения (в начале строки) соответствует любым символам, насколько это возможно, за которыми следует символapple подстрока (если шаблон не найден, совпадения нет)
  • [^.]* - 0+ символов, кроме точки
  • $ - конец строки (подразумевается в.matches())
0 голосов
/ 27 сентября 2018

Вы должны включить точку в качестве символа для исключения.Поскольку . является управляющим символом в регулярном выражении, его необходимо экранировать:

^((?!apple|\.).)*$

В этом случае мы сообщаем ему, что он должен соответствовать 0 или более любому символу, если нет сопоставления с образцом«яблоко» или «.»где-нибудь в строке.

Это выражение можно деконструировать следующим образом:

^     = Start of string
(     = Start of capture group
(     = Start of capture group
?!    = Negative Look ahead
apple = First thing to look for
|     = Logical Or
\.    = Match a literal . character
)     = End of capture group
.     = Match any character
)     = End of capture group
*     = Match zero or more
$     = End of String
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...