我知道我可以执行以下操作[^ h]以使所有匹配接受带有'h'的匹配。 我怎么用整个单词来做这个,比如^(word)
答案 0 :(得分:11)
如果您想匹配与 foo
不相同的字符串:
^(?!foo).*$
如果您想匹配不包含 foo
的字符串:
^(?!.*foo).*$
如果您想匹配不包含foo
的字符串作为完整的单词:
^(?!.*\bfoo\b).*$
如果您希望匹配字符串,直到foo
出现并在foo
之前停止匹配:
^(?:(?!foo).)*
这些解决方案不处理字符串中的换行符,因此如果出现问题,您可能必须在.NET中设置相应的正则表达式选项,如RegexOptions.Singleline
。
(?!foo)
是zero-width negative lookahead expression,这意味着它断言在字符串中的当前位置后匹配foo
是不可能的(“否定”)(“look 提前“),同时不消耗匹配尝试中的任何字符(”零宽度“)。
答案 1 :(得分:3)
使用正则表达式实际上没有好办法。你可以得到的最近的是使用一个negative lookahead,只有当后面的字符串没有显示正负表达时才会找到正则表达式 ...:
foo(?!word)
只会发现foo
后面没有word
。
同样存在于后面(而不是前方):
(?<!word)foo
如果foo
之前没有word
,则只会找到{{1}}。