C# .NET正则表达式-“;不是";匹配
我有一个正则表达式:C# .NET正则表达式-“;不是";匹配,c#,.net,regex,C#,.net,Regex,我有一个正则表达式: 12345678|[0]{8}|[1]{8}|[2]{8}|[3]{8}|[4]{8}|[5]{8}|[6]{8}|[7]{8}|[8]{8}|[9]{8} 如果字符串包含12345679或11111111或2222,则匹配。。。或999999999 如果不符合上述条件,我如何将其更改为仅匹配?(很遗憾,我不能在C#中仅使用!IsMatch)…编辑,因为这对我来说是黑盒代码,我正在尝试在现有配置文件中设置正则表达式 我不能就这样!不幸的是,C#中的IsMatch 为什么不
12345678|[0]{8}|[1]{8}|[2]{8}|[3]{8}|[4]{8}|[5]{8}|[6]{8}|[7]{8}|[8]{8}|[9]{8}
如果字符串包含12345679或11111111或2222,则匹配。。。或999999999
如果不符合上述条件,我如何将其更改为仅匹配?(很遗憾,我不能在C#中仅使用!IsMatch)…编辑,因为这对我来说是黑盒代码,我正在尝试在现有配置文件中设置正则表达式
我不能就这样!不幸的是,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
,…,9999999
的字符串
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})$).*$");
这将匹配一切
foundMatch = Regex.IsMatch(SubjectString, @"^(?:(?!123456789|(\d)\1{7}).)*$");
除非在字符串中找到一个“禁止”序列
不使用!isMatch
如您所见
编辑:
添加第二个约束可以通过前瞻断言完成:
foundMatch = Regex.IsMatch(SubjectString, @"^(?=\d{9,12})(?:(?!123456789|(\d)\1{7}).)*$");
首先,您不需要任何
[]
括号;你可以做0{8}| 1{8}|
等等
现在来解决你的问题。尝试使用消极前瞻:
@"^(?:(?!123456789|(\d)\1{7}).)*$"
这将解决您的问题,而无需使用
!IsMatch
“/p>“我不能只进行!IsMatch”-为什么不?我想问题是在组或类似的组中收集“不匹配”或将其从类似的字符串中取出,例如12345678import0000000,所以112345678
您想匹配的东西吗?(注意前面额外的1
)我不能这么做!IsMatch因为这对我来说是黑盒代码,我正在尝试在现有配置文件中设置正则表达式。我认为您的正则表达式仍然与括号中的代码匹配。但是它更短了。@David Ward我用一个解决方案更新了我的答案,这个解决方案应该匹配除你不想要的以外的任何东西。这几乎奏效了,但在不应该的时候匹配了22222。下面的FailedDev答案奏效了(当我将第一条规则更改为仅12345678时)。谢谢你的帮助help@DavidWard好的,看来我的解决方案太严格了,它不能精确匹配同一个数字的8倍,但它当然可以接受9次重复。注意:我觉得原子分组比(\d)\1{7}
构造更好,但我对原子组了解不够,无法让它工作。欢迎有兴趣的人发表评论。我不知道您可以量化零宽度断言@FailedDev-我的错,我漏掉了一对括号。已修复。实际在.net中编译的:S@FailedDev-天哪,你说得对。旧版本似乎与空字符串匹配。我想知道内部发生了什么,以及如何应用前瞻性。我的猜测是,除了可能使发动机减速之外,它没有任何效果。”^(?((?!12345678 |)(\d)\1{7})。*$”非常有效,谢谢much@DavidWard不客气。我以为你输入了12345678:)这可以很容易地扩展到长度限制在9到12个字符之间吗很高兴搬到另一个地方question@DavidWard是的,如果你告诉我你所说的chars是什么意思的话。只有数字?还是什么?很好,9到12个数字字符(即0,1,2,3,4,5,6,7,8或9)