我有一个正则表达式:
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 )...EDIT,因为这对我来说是黑盒代码,我正在尝试在现有的配置文件中设置正则表达式
发布于 2011-11-30 22:54:46
这将会匹配所有的东西。
foundMatch = Regex.IsMatch(SubjectString, @"^(?:(?!123456789|(\d)\1{7}).)*$");除非在字符串中找到一个“禁止的”序列,否则为。
正如您所看到的,不是使用!isMatch的。
编辑:
添加第二个约束可以通过先行断言来完成:
foundMatch = Regex.IsMatch(SubjectString, @"^(?=\d{9,12})(?:(?!123456789|(\d)\1{7}).)*$");发布于 2011-11-30 22:46:24
完美工作
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})$).*$");发布于 2011-11-30 22:55:27
首先,您不需要任何[]括号;您可以只执行0{8}|1{8}|等操作。
现在来看看你的问题。尝试使用负向先行:
@"^(?:(?!123456789|(\d)\1{7}).)*$"这应该可以在不使用!IsMatch的情况下解决您的问题。
https://stackoverflow.com/questions/8327478
复制相似问题