首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET正则表达式-“不”匹配

.NET正则表达式-“不”匹配
EN

Stack Overflow用户
提问于 2011-11-30 22:28:53
回答 4查看 13.9K关注 0票数 4

我有一个正则表达式:

代码语言:javascript
复制
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,因为这对我来说是黑盒代码,我正在尝试在现有的配置文件中设置正则表达式

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-30 22:54:46

这将会匹配所有的东西。

代码语言:javascript
复制
foundMatch = Regex.IsMatch(SubjectString, @"^(?:(?!123456789|(\d)\1{7}).)*$");

除非在字符串中找到一个“禁止的”序列,否则为

正如您所看到的,不是使用!isMatch的。

编辑:

添加第二个约束可以通过先行断言来完成:

代码语言:javascript
复制
foundMatch = Regex.IsMatch(SubjectString, @"^(?=\d{9,12})(?:(?!123456789|(\d)\1{7}).)*$");
票数 10
EN

Stack Overflow用户

发布于 2011-11-30 22:46:24

完美工作

代码语言:javascript
复制
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();

顺便说一句。我对您的表达式进行了一些简化并添加了锚点

代码语言:javascript
复制
^(?:12345678|(\d)\1{7})$

(\d)\1{7}部分接受一个数字\d\1检查这个数字是否重复了7次。

更新

此正则表达式正在执行您想要的操作

代码语言:javascript
复制
Regex regx = new Regex(@"^(?!(?:12345678|(\d)\1{7})$).*$");
票数 2
EN

Stack Overflow用户

发布于 2011-11-30 22:55:27

首先,您不需要任何[]括号;您可以只执行0{8}|1{8}|等操作。

现在来看看你的问题。尝试使用负向先行:

代码语言:javascript
复制
@"^(?:(?!123456789|(\d)\1{7}).)*$"

这应该可以在不使用!IsMatch的情况下解决您的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8327478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档