我尝试查找不包含相同子字符串的字符串。这是我的代码:
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
但是这段代码不起作用......我做错了什么?
谢谢!
答案 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
}