Regex to match anything but two words

空扰寡人 提交于 2019-11-27 20:02:30
Tim Pietzcker

Answer to the question: "A Regular Expression to match anything that isn't "foo" and "bar"?"

^(?!foo$|bar$).*

would do exactly that.

^      # 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

You might need to set RegexOptions.Singleline if your string can contain newlines that you also wish to match.

Pindatjuh

Answer to the question: "How to add a second word to this critera?"

The answer of the question you link to is:

^((?!word).)*$

Where (?!word) is a negative look-ahead. The answer for this question is:

^((?!wordone|wordtwo).)*$

Works for both words. Note: you should enable the global and multiline options, if you have multiple lines and want to match for each line, as the other question.

The difference is the negative look-ahead clause: (?!wordone|wordtwo). It can be extended to any (reasonable) amount of words or clauses.

See this answer for a detailed explanation.

I get what you want to do, but the specifics of what you want to block/allow are a little unclear. For example, do you want to block anything that isn't exactly foo or bar? Or do you want to block anything containing those two strings?

Can they be part of another string, as in @Tim's foonly or bartender examples?

I'm just going to suggest patterns for each one:

/^(?!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"
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!