Регулярное выражение, чтобы соответствовать чему-либо, кроме двух слов
Я пытаюсь написать регулярное выражение, чтобы соответствовать чему-либо, что не "foo" и "bar". Я нашел, как сопоставить что-либо, кроме одного слова в регулярном выражении, чтобы соответствовать строке, которая не содержит слово? но я не очень хорошо разбираюсь в регулярных выражениях и не уверен, как добавить второе слово к этому критерию.
Любая помощь будет наиболее ценится!
ПОЯСНЕНИЯ:
Я хотел соответствовать чему-либо, что не было ТОЧНО ФУ или баром.
3 ответа
Ответ на вопрос: "Регулярное выражение, чтобы сопоставить что-либо, кроме"foo"и"bar"?"
^(?!foo$|bar$).*
сделал бы именно это.
^ # Start of string
(?! # Assert that it's 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
если ваша строка может содержать символы новой строки, которые вы также хотите соответствовать.
Ответ на вопрос: "Как добавить второе слово к этому критерию?"
Ответ на вопрос, на который вы ссылаетесь:
^((?!word).)*$
куда (?!word)
это негативный прогноз. Ответ на этот вопрос:
^((?!wordone|wordtwo).)*$
Работает для обоих слов. Примечание: вы должны включить глобальные и многострочные параметры, если у вас есть несколько строк и вы хотите сопоставить каждую строку, как другой вопрос.
Разница заключается в отрицательном прогнозном предложении: (?!wordone|wordtwo)
, Это может быть распространено на любое (разумное) количество слов или предложений.
Смотрите этот ответ для подробного объяснения.
Я понимаю, что вы хотите сделать, но особенности того, что вы хотите заблокировать / разрешить, немного неясны. Например, вы хотите заблокировать все, что не совсем foo
или же bar
? Или вы хотите заблокировать что-либо, содержащее эти две строки?
Могут ли они быть частью другой строки, как в @Tim's 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"