正则表达式只能匹配两个单词

我试图写一个正则表达式来匹配任何不是“foo”和“bar”的东西。 我发现如何在正则表达式中匹配除了一个单词之外的任何内容,以匹配不包含单词的行? 但我对于正则表达式并不熟练,我不确定如何在这个标准中添加第二个单词。

非常感激任何的帮助!

澄清:

我想匹配任何不是完全富有或不合适的东西。


回答这个问题:“一个正则表达式匹配任何不是”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) 。 它可以扩展到任何(合理的)数量的单词或从句。

请参阅此答案以获取详细说明。


我得到你想要做的事情,但是你想阻止/允许的细节有点不清楚。 例如,你想阻止任何不完全是 foobar吗? 或者你想阻止任何包含这两个字符串的内容?

他们可以成为另一个字符串的一部分,就像@ Tim的foonlybartender例子一样?

我只是要为每一个建议模式:

/^(?!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"
链接地址: http://www.djcxy.com/p/13445.html

上一篇: Regex to match anything but two words

下一篇: Regular expression to stop at first match