正则表达式 12位数字,其中不能出现6位连续数字

zhangweisjz 2009-03-08 04:15:40
如题,需要用正则表达式来限定输入:
只允许12位数字,并且其中不能出现6位连续数字,
例如,123456789012是匹配的,
而123333334567是不允许的。
请帮忙,谢谢。

答案请稍微注释一下,让我学习学习。
非常感谢!
...全文
1980 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainsome 2009-03-09
  • 打赏
  • 举报
回复
学习。来个JavaScript版本的
regex=/^(?:([0-9])(?!\1{5})){12}$/;
zhangweisjz 2009-03-09
  • 打赏
  • 举报
回复
结果是正确的。
太帅了,太敞亮了……,

请解释^(?:([0-9])(?!\1{5})){12}$什么意思,也给我启蒙:)
(我明白(\d)\1{5}是6位连续数字的意思,^$是行的起始和结束)
pztx1992 2009-03-09
  • 打赏
  • 举报
回复

^(?:([0-9])(?!\1{5})){12}$
//看比较复杂的正则从内到外看
^$之间的正则表示只匹配正则的内容
([0-9])//捕获数字的一个组
([0-9])(?!\1{5}) \1表示的值是这个组所匹配的数字 {5}即连续5次,加上原本的一次所以一共6次
表达式(?!表达式)的意思是表达式后面不跟某个表达式

由于内部匹配的数字 这里的12表示是一共12个数字。

解释正则是比较累的。。。。。。 Hate It

\b\b和^$是一样的,习惯写法 一般用^$ 原因,我喜欢!!!



止戈而立 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhangweisjz 的回复:]
谢谢,因为无法粘贴图片,。
我把Regex Tester的内容显示如下,我这边匹配不了:
Regex: ^(?:([0-9])(?!\1{5})){12}$
Raplace:
Source:

123456789012
1234567890123
124444447890

Matches: 没有显示任何内容。

pztx1992,麻烦你帮分析一下^(?:([0-9])(?!\1{5})){12}$的意思,我看不出来这里面是如何实现“非6位连续数字的” 我明白(\d)\1{5}是6位连续数字的意思,^$是行的起始和结束,其他的,我不明白,…
[/Quote]

说明一下,过客给的正则是对的,是验证某一字符串是否符合条件,而不是从字符串中提取。
若要提取,改成这样看看:

\b(?:([0-9])(?!\1{5})){12}\b
zhangweisjz 2009-03-09
  • 打赏
  • 举报
回复
谢谢,因为无法粘贴图片,。
我把Regex Tester的内容显示如下,我这边匹配不了:
Regex: ^(?:([0-9])(?!\1{5})){12}$
Raplace:
Source:

123456789012
1234567890123
124444447890

Matches: 没有显示任何内容。

pztx1992,麻烦你帮分析一下^(?:([0-9])(?!\1{5})){12}$的意思,我看不出来这里面是如何实现“非6位连续数字的” 我明白(\d)\1{5}是6位连续数字的意思,^$是行的起始和结束,其他的,我不明白,非常感谢,非常感谢。
pztx1992 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhangweisjz 的回复:]
lxcnn, 我用Regex Tester测试了你的代码,不可行。你能确定一下吗?
[/Quote]

可以的,不过有些正则还是分开写比较好。再说我的正则也是lxcnn启蒙的。嘿嘿
zhangweisjz 2009-03-09
  • 打赏
  • 举报
回复
lxcnn, 我用Regex Tester测试了你的代码,不可行。你能确定一下吗?
zhangweisjz 2009-03-09
  • 打赏
  • 举报
回复
谢谢各位,这个帖子让我感到程序员大家庭特别的温暖……
加分结贴。
再次感谢!
-过客- 2009-03-08
  • 打赏
  • 举报
回复
这个没什么难的,原理和下面这个帖子基本相同,相对来说还要简单些

http://topic.csdn.net/u/20090217/16/adc87559-6172-4fd6-9e54-246f8fb3ee02.html

需求拆分一下
1、一个数字
2、它后面不能连续出现5个与它相同的数字
3、满足以上两条的字符一共12个

这样就没什么可注释的了,原理参考上面的帖子
-过客- 2009-03-08
  • 打赏
  • 举报
回复
try...

^(?:([0-9])(?!\1{5})){12}$
cppfaq 2009-03-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhangweisjz 的回复:]
pztx1992, 谢谢,但是需要一个表达式实现这个结果,请再帮帮忙。
[/Quote]

这个基本上一个正则式难以实现
zhangweisjz 2009-03-08
  • 打赏
  • 举报
回复
pztx1992, 谢谢,但是需要一个表达式实现这个结果,请再帮帮忙。
pztx1992 2009-03-08
  • 打赏
  • 举报
回复
using System;
using System.IO;
using System.Text.RegularExpressions;

namespace CSDN
{
class Application
{
static void Main()
{
bool b = Check("123456789012");
b = Check("123333334567");
}
static bool Check(string s)
{
if (Regex.Match(s, "^\\d{1,12}$").Success)
{
return !(Regex.Match(s, @"(\d)\1{5}").Success);
}
return false;
}
}
}

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧