#regex
#регулярное выражение
Вопрос:
Я хотел бы сопоставить все, кроме заданных слов, поэтому, учитывая этот список:
wordOne
wordTwo/xy/z
word-three
word-four/lots/of/stuff
Я мог бы использовать это регулярное выражение для сопоставления всего, кроме wordOne:
(?!wordOne)b.
==>
wordTwo/xy/z
word-three
word-four/lots/of/stuff
Однако, если я хочу сопоставить все, кроме одного из слов, содержащих дефис / тире, то одно и то же регулярное выражение не работает, потому что дефис не является частью границы слова, которая является [a-zA-Z0-9_]
Например
some-regexp(word-four)
==>
wordOne
wordTwo/xy/z
word-three
И
some-regexp(word-four and word-three)
==>
wordOne
wordTwo/xy/z
Ответ №1:
Как я вижу, вы определяете по одному слову в строке в своих примерах. В этом случае это регулярное выражение должно работать для вас:
^(?:(?!word-four|word-three).)*$
оно пропускает слова, содержащие word-four
или word-three
.
Согласно вашим примерам:
^(?:(?!wordOne).)*$
==>
wordTwo/xy/z
word-three
word-four/lots/of/stuff
^(?:(?!word-four).)*$
==>
wordTwo/xy/z
word-three
word-four/lots/of/stuff
^(?:(?!word-four|word-three).)*$
==>
wordOne
wordTwo/xy/z
Смотрите это на rubular.