Как сопоставить строку, не содержащую слово [дубликат]
этот вопрос уже есть ответ здесь:
мне было интересно, как сопоставить строку, не содержащую определенного слова, используя регулярное выражение в стиле Python (просто используйте регулярное выражение, а не Python функции)?
пример:
PART ONE OVERVIEW 1
Chapter 1 Introduction 3
Я хочу сопоставить строки, которые не содержат слово "часть"?
спасибо и привет!
1 ответ:
это должно работать:
/^((?!PART).)*$/
если бы вы только хотели исключить его из начала строки (Я знаю, что вы этого не делаете, но просто FYI), вы могли бы использовать это:
/^(?!PART)/
Edit (по запросу): почему этот шаблон работает
The
(?!...)
синтаксис-это отрицательный lookahead, что мне всегда было трудно объяснить. В принципе, это означает " все, что следует за этим пунктом, не должно совпадать с регулярным выражением/PART/
." сайт Я связал объясняет это гораздо лучше, чем я могу, но я постараюсь сломать это:^ #Start matching from the beginning of the string. (?!PART) #This position must not be followed by the string "PART". . #Matches any character except line breaks (it will include those in single-line mode). $ #Match all the way until the end of the string.
The
((?!xxx).)*
идиома, вероятно, труднее всего понять. Как мы видели,(?!PART)
смотрит на строку впереди и говорит, что все, что происходит дальше, не может соответствовать подшаблону/PART/
. Так что мы делаем с((?!xxx).)*
проходит через строку букву за буквой и применяет правило ко всем из них. Каждый символ может быть чем угодно, но если вы возьмете этот символ и следующие несколько символов после это, вам лучше не получить слово часть.The
^
и$
якоря должны требовать, чтобы правило применялось ко всей строке, от начала до конца. Без этих якорей, любой кусок строки, который не начинался с часть будет матч. Даже часть сам по себе будет иметь совпадения в нем, потому что (например) буква A не сопровождается точной строкой часть.так как мы делаем есть
^
и$
, если часть были в любом месте строки, один из символов будет соответствовать(?=PART).
и общий матч будет провален. Надеюсь, что это достаточно ясно, чтобы быть полезным.