Regex для отрицания всего слова?
String test1 = "This is my test string";
Я хочу сопоставить строку, которая не содержит "тест"
Я могу сделать это с
Pattern p = Pattern.compile(".*?^(test).*?")
и это работает, но на большинстве сайтов, таких как регулярные выражения и отрицание целой группы символов ^(?!.*test).*$
предлагается, который не работал для меня.
Согласно моему пониманию ^(test)
достаточно так почему ^(?!.*test).*$
необходимо?
2 ответа
Вы хотите следующее вместо этого.
^(?:(?!test).)*$
Регулярное выражение:
^ the beginning of the string
(?: group, but do not capture (0 or more times)
(?! look ahead to see if there is not:
test 'test'
) end of look-ahead
. any character except \n
)* end of grouping
$ before an optional \n, and the end of the string
С использованием ^(test)
, он только ищет тест в начале строки, но не отрицает ее.
Отрицание ^
Оператор будет работать только внутри класса символов [^ ]
, но целые слова не работают внутри класса символов. Например [^test]
соответствует любому символу, кроме: (t
, e
, s
, t
)
.*
= что-нибудь ноль или более раз
Регулярное выражение:
^((?!test).)*$
Я неправильно понимаю это. Теперь я думаю, что это сработает.