在正则表达式中停止单词

时间:2011-01-12 10:01:42

标签: c# regex

我知道我可以执行以下操作[^ h]以使所有匹配接受带有'h'的匹配。 我怎么用整个单词来做这个,比如^(word)

2 个答案:

答案 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}}。