Строка соответствия регулярному выражению не содержит слов и содержит другие слова - PullRequest
3 голосов
/ 30 апреля 2019

Я хочу найти строки, содержащие определенное слово, например book, и не содержит car перед ним.

Я пытался написать его так:

[?!car].*book

Но это не работает, поэтому в следующих строках:

this car is a book
this is a book
book car

Первое не должно совпадать, остальные 2 должны.Что я делаю не так?

https://regex101.com/r/L33d0h/1

1 Ответ

2 голосов
/ 30 апреля 2019

Вот оно у вас

^(?:(?!car).)*book.*$

Я использовал группу без захвата, чтобы иметь одно полное совпадение с регулярным выражением, но вы можете использовать его как хотите.

Используемое вами регулярное выражение ищет в строке первое вхождение любого символа в наборе символов [?!car]; это означает, что ? и ! рассматриваются как отдельные символы, а не как группа без захвата, как вы, возможно, предполагали в противном случае. Следующие символы будут жадно захвачены, если не будет встречено book. Вот почему ваш Regex не дает вам требуемого результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...