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

goo*_*oon 35 .net regex regex-negation

我正在尝试编写一个正则表达式来匹配任何不是"foo"和"bar"的东西.我发现如何在正则表达式中匹配除一个单词以外的任何单词以匹配不包含单词的行?但我对正则表达式并不熟悉,也不确定如何在这个标准中加入第二个单词.

非常感激任何的帮助!

澄清:

我想匹配任何不完全foo或bar的东西.

Tim*_*ker 77

回答问题:"正则表达式匹配任何不是"foo"和"bar"的东西?"

^(?!foo$|bar$).*
Run Code Online (Sandbox Code Playgroud)

会做到这一点.

^      # 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
Run Code Online (Sandbox Code Playgroud)

您可能需要设置RegexOptions.Singleline字符串是否包含您希望匹配的换行符.

  • 只有当整个字符串是其中一个单词时才会触发.目前尚不清楚OP是否需要,但值得指出. (3认同)

Pin*_*juh 19

回答这个问题:"如何在第二个单词添加到这个性判据?"

您链接的问题的答案是:

^((?!word).)*$
Run Code Online (Sandbox Code Playgroud)

哪里(?!word)是负面的预测.这个问题的答案是:

^((?!wordone|wordtwo).)*$
Run Code Online (Sandbox Code Playgroud)

适用于这两个词.注意:如果您有多行并且想要匹配每一行,则应启用全局多行选项,作为另一个问题.

区别在于负前瞻条款:(?!wordone|wordtwo).它可以扩展到任何(合理)数量的单词或从句.

有关详细说明,请参阅此答案.


Jus*_*gan 8

我得到了你想做的事情,但你想要阻止/允许的具体细节有点不清楚.例如,你想阻止任何不完全 foo或者bar?或者你想阻止包含这两个字符串的任何东西?

他们可以是另一个字符串的一部分,如@蒂姆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"
Run Code Online (Sandbox Code Playgroud)