正则表达式匹配不包含子字符串的字符串

时间:2012-01-31 09:20:32

标签: c# regex substring

我尝试查找不包含相同子字符串的字符串。这是我的代码:

var regex = new Regex(@"aaa(?!.*aaa).*aaa");
var str1 = @"aaa aaa aaa";
var match = regex.Match(str1); // no
var str1 = @"aaa bbb aaa";
var match = regex.Match(str1); // yes

但是这段代码不起作用......我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:7)

你想要一个这样的表达式:

aaa(?:(?!aaa).)*aaa

(?:(?!aaa).)*匹配不包含aaa的字符串(全部或部分)。

您也可以这样写:

aaa(?:[^a]+|a(?!aa))*aaa

答案 1 :(得分:0)

我会在黑暗中刺伤,并猜测你正在尝试这样做。

即。

`\b(\w+)\s+(?!\1\b)`

匹配单词\b(\w+) 随后是空格\s+ 接下来是对先前匹配的单词的后向引用的否定前瞻。 (?!\1\b)

[Test]
public void RegexTest()
{
    var regex = new Regex(@"\b(\w+)\s+(?!\1\b)");
    var str1 = @"aaa aaa aaa";
    Assert.IsFalse(regex.IsMatch(str1)); // no
    var str2 = @"aaa bbb aaa";
    Assert.IsTrue(regex.IsMatch(str2)); // yes
}