我有一个正则表达式:
12345678|[0]{8}|[1]{8}|[2]{8}|[3]{8}|[4]{8}|[5]{8}|[6]{8}|[7]{8}|[8]{8}|[9]{8}
如果字符串包含12345679或11111111或22222222 ...或... 999999999,则匹配。
如果不符合上述条件,我怎么能改变它? (我不能只是!不幸的是在C#中的IsMatch)...编辑,因为这是我的黑盒代码,我试图在现有的配置文件中设置正则表达式
答案 0 :(得分:9)
这将匹配所有......
foundMatch = Regex.IsMatch(SubjectString, @"^(?:(?!123456789|(\d)\1{7}).)*$");
除非在字符串中找到“禁止的”序列之一。
正如您所见, 不使用!isMatch
。
修改强>
使用前瞻断言可以完成添加第二个约束:
foundMatch = Regex.IsMatch(SubjectString, @"^(?=\d{9,12})(?:(?!123456789|(\d)\1{7}).)*$");
答案 1 :(得分:2)
完美运作
string s = "55555555";
Regex regx = new Regex(@"^(?:12345678|(\d)\1{7})$");
if (!regx.IsMatch(s)) {
Console.WriteLine("It does not match!!!");
}
else {
Console.WriteLine("it matched");
}
Console.ReadLine();
顺便说一下。我简化了你的表达并添加了锚点
^(?:12345678|(\d)\1{7})$
(\d)\1{7}
部分采用数字\d
,\1
检查此数字是否重复7次。
<强>更新强>
这个正则表达式正在做你想要的事情
Regex regx = new Regex(@"^(?!(?:12345678|(\d)\1{7})$).*$");
答案 2 :(得分:2)
首先,您不需要任何[]
括号;你可以做0{8}|1{8}|
等。
现在为您解决问题。尝试使用否定前瞻:
@"^(?:(?!123456789|(\d)\1{7}).)*$"
这应该在不使用!IsMatch
的情况下解决您的问题。
答案 3 :(得分:0)
我无法做到!不幸的是,#C中的IsMatch。
为什么不呢?以下解决方案有什么问题?
bool notMatch = !Regex.Match(yourString, "^(12345678|[0]{8}|[1]{8}|[2]{8}|[3]{8}|[4]{8}|[5]{8}|[6]{8}|[7]{8}|[8]{8}|[9]{8})$");
这将匹配任何不仅包含12345678
,11111111
,...,99999999