正则表达式匹配字符串但不是另一个

时间:2011-11-01 11:23:41

标签: c# regex

我有以下两个字符串

/signon/default.wl?rs=WLW11.10&vr=2.0&fn=_top
/signon/default.wl?fn=%5Ftop&newdoor=true&rs=WLW11%2E10&vr=2%2

我想匹配除了不包含newdoor

之外的所有字符串

到目前为止,我有以下正则表达式

  

/signon/default.wl \?(?= [\ W] *)(?newdoor)

但它匹配所有字符串。 任何人都可以指出我做错了什么。

3 个答案:

答案 0 :(得分:5)

您可以尝试此/signon/default.wl\?(?!.*newdoor).*

使用否定先行断言输入字符串中没有newdoor。代码看起来像这样

resultString = Regex.Match(subjectString, @"/signon/default.wl\?(?!.*newdoor).*", 
               RegexOptions.IgnoreCase).Value;

答案 1 :(得分:0)

/signon/default.wl\?(?=[\w]*)(?!newdoor)

(?=)(?!)都是零宽度断言,不消耗任何输入。尝试:

/signon/default.wl\?(.(?!newdoor))*$

答案 2 :(得分:0)

为什么不使用类似的东西:

subjectString.contains("newdoor");