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).)*$

Я неправильно понимаю это. Теперь я думаю, что это сработает.

Другие вопросы по тегам