Регулярное выражение соответствует только двум словам
Я пытаюсь написать регулярное выражение, чтобы соответствовать всем, что не является "foo" и "bar". Я нашел, как сопоставить что-либо, кроме одного слова, в Регулярное выражение для соответствия строке, которая не содержит слова?, но я не очень разбираюсь в регулярном выражении и не уверен о том, как добавить к этому критерию второе слово.
Любая помощь будет оценена по достоинству!
УТОЧНЕНИЕ:
Я хотел сопоставлять все, что не было ТОЧНО foo или bar.
Ответы
Ответ 1
Отвечайте на вопрос: "Регулярное выражение для соответствия всем, что не является" foo "и" bar "?
^(?!foo$|bar$).*
сделает именно это.
^ # Start of string
(?! # Assert that it impossible to match...
foo # foo, followed by
$ # end of string
| #
bar$ # bar, followed by end of string.
) # End of negative lookahead assertion
.* # Now match anything
Вам может потребоваться установить RegexOptions.Singleline
, если ваша строка может содержать символы новой строки, которые вы также хотите сопоставить.
Ответ 2
Отвечайте на вопрос: "Как добавить второе слово в этот критерий?
Ответ на ваш вопрос:
^((?!word).)*$
Где (?!word)
- негативный прогноз. Ответ на этот вопрос:
^((?!wordone|wordtwo).)*$
Работает для обоих слов. Примечание: вы должны включить глобальные и многострочные параметры, если у вас есть несколько строк и вы хотите совместить для каждой строки, в качестве другого вопроса.
Разница заключается в отрицательной фразе "вперед-вперед": (?!wordone|wordtwo)
. Он может быть распространен на любое (разумное) количество слов или предложений.
Подробнее см. этот ответ.
Ответ 3
Я получаю то, что вы хотите сделать, но особенности того, что вы хотите заблокировать/разрешить, немного неясны. Например, вы хотите заблокировать все, что не соответствует точно foo
или bar
? Или вы хотите заблокировать что-либо , содержащее эти две строки?
Могут ли они быть частью другой строки, как в примерах @Tim foonly
или bartender
?
Я просто предлагаю шаблоны для каждого из них:
/^(?!foo$|bar$).*/ #credit to @Tim Pietzcker for this one, he did it first
#blocks "foo"
#blocks "bar"
#allows "hello goodbye"
#allows "hello foo goodbye"
#allows "foogle"
#allows "foobar"
/^(?!.*foo|.*bar).*$/
#blocks "foo"
#blocks "bar"
#allows "hello goodbye"
#blocks "hello foo goodbye"
#blocks "foogle"
#blocks "foobar"
/^(?!.*\b(foo|bar)\b).*$/
#blocks "foo"
#blocks "bar"
#allows "hello goodbye"
#blocks "hello foo goodbye"
#allows "foogle"
#allows "foobar"