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
字符串是否包含您希望匹配的换行符.
Pin*_*juh 19
回答这个问题:"如何在第二个单词添加到这个性判据?"
您链接的问题的答案是:
^((?!word).)*$
Run Code Online (Sandbox Code Playgroud)
哪里(?!word)
是负面的预测.这个问题的答案是:
^((?!wordone|wordtwo).)*$
Run Code Online (Sandbox Code Playgroud)
适用于这两个词.注意:如果您有多行并且想要匹配每一行,则应启用全局和多行选项,作为另一个问题.
区别在于负前瞻条款:(?!wordone|wordtwo)
.它可以扩展到任何(合理)数量的单词或从句.
有关详细说明,请参阅此答案.
我得到了你想做的事情,但你想要阻止/允许的具体细节有点不清楚.例如,你想阻止任何不完全 foo
或者bar
?或者你想阻止包含这两个字符串的任何东西?
他们可以是另一个字符串的一部分,如@蒂姆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"
Run Code Online (Sandbox Code Playgroud)