java正则表达式匹配重复的数字,而不是0,1

java正则表达式匹配重复的数字,而不是0,1,java,regex,match,digits,Java,Regex,Match,Digits,我需要写一个模式,匹配以012开头的11位数字和012后面的两位数字,不应该是0,1,应该重复。 例如:01244521478为真或01266235698为真,01200256354为假。我尝试了这个模式:012。\\1{1}[\\d]{6}$但我不知道在哪里说0,012之后不允许使用1。 请帮助我您的正则表达式012。\1{1}[\d]{6}$可以,但无法处理您的第4位和第5位数字不应为0或1,应重复要求。而且{1}不需要,因为默认情况下它是隐式的。仅当柯利括号内的值大于一个或类似于{2}或{

我需要写一个模式,匹配以012开头的11位数字和012后面的两位数字,不应该是0,1,应该重复。 例如:01244521478为真或01266235698为真,01200256354为假。我尝试了这个模式:012。\\1{1}[\\d]{6}$但我不知道在哪里说0,012之后不允许使用1。 请帮助我

您的正则表达式012。\1{1}[\d]{6}$可以,但无法处理您的第4位和第5位数字不应为0或1,应重复要求。而且{1}不需要,因为默认情况下它是隐式的。仅当柯利括号内的值大于一个或类似于{2}或{1,5}的范围时才使用它

这个正则表达式应该满足您的需要

^(?=\d{11}$)012([^01])\1\d{6}$
说明:

^->字符串的开头 ?=\d{11}$->正向向前看,确保它只包含数字,并且正好是11位数字。为什么需要这样做,因为[^01]可以对0和1求反,但不允许使用任何其他字符。 012->按字面意思匹配012 [^01]\1->后两位数字将重复,可以是除0和1之外的任何数字 \d{6}->匹配任意六位数字 $->输入结束 在正则表达式中使用。\\1,它将捕获组中的任何字符,并使用反向引用引用该caputure,例如,该反向引用也将匹配012$$521478

您可以做的是更改。\\1以匹配从2到9的数字,如[2-9]\\1。如果没有在工具或代码中引用第二个捕获组,则可以省略该组。{1}可以省略,[\\d]可以写成\\d

更新后的正则表达式可能如下所示:

^012[2-9]\1\d{6}$

在Java中:

String regex = "^012([2-9])\\1\\d{6}$";
|

解释

^断言字符串的开头 012符合字面意思 [2-9]在组中捕获数字2-9 \1对第一个捕获组的反向引用 \d{6}匹配6位数字 $Assert是字符串的结尾