我有一个正则表达式:
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)......编辑因为对我来说那是黑盒子代码,我正在尝试在现有配置文件中设置正则表达式
这将匹配所有内容...
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}).)*$"
(\d)\1{7}
结构更好,但我不太了解原子分组,无法让它正常工作。任何熟悉原子分组的人都可以留言评论。 - Justin Morgan完美运作
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}
表示检查这个数字是否重复出现了7次。
更新
这个正则表达式可以满足你的需求。
Regex regx = new Regex(@"^(?!(?:12345678|(\d)\1{7})$).*$");
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
的任何字符串
112345678
是你想匹配的吗?(注意前面多了一个1
) - ean5533