Подтвердить что ты не робот

Регулярное выражение соответствует только двум словам

Я пытаюсь написать регулярное выражение, чтобы соответствовать всем, что не является "foo" и "bar". Я нашел, как сопоставить что-либо, кроме одного слова, в Регулярное выражение для соответствия строке, которая не содержит слова?, но я не очень разбираюсь в регулярном выражении и не уверен о том, как добавить к этому критерию второе слово.

Любая помощь будет оценена по достоинству!

УТОЧНЕНИЕ:

Я хотел сопоставлять все, что не было ТОЧНО foo или bar.

4b9b3361

Ответ 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"