我正在尝试编写一个用于匹配由9个固定数字组成的电话号码的正则表达式模式。
我想要识别那些由两个数字交替出现四次的号码,例如5XYXYXYXY
我使用了以下模式:
number = 561616161
我尝试了下面的模式,但是它不准确。
^5(\d)(?=\d\1).+
有人能指出我做错了什么吗?
^(?=\d{9}$)\d*(\d)(\d)(?:\1\2){3}\d*$
以下是该模式的解释:
^
匹配数字的起始位置(?=\d{9}$)
断言恰好有9个数字\d*
匹配可选的前导数字(\d)
捕获\1
中的一个数字(\d)
捕获\2
中的另一个数字(?:\1\2){3}
再次匹配XY组合3次\d*
匹配更多的可选数字$
匹配数字的结尾位置如果你想重复4次2个相同的配对并匹配9个数字:
^(?=\d{9}$)\d*(\d\d)\1{3}\d*$
解释
^
字符串开头(?=\d{9}$)
正向先行断言,断言字符串末尾有九个数字\d*
匹配可选数字(\d\d)\1{3}
捕获组1,匹配两个数字并重复捕获组1中的内容三次\d*
匹配可选数字$
字符串结尾如果你想匹配一个重复四次的两位不同数字的模式:
^(?=\d{9}$)\d*((\d)(?!\2)\d)\1{3}\d*$
解释
^
匹配字符串开头(?=\d{9}$)
正向先行断言,匹配断言后面的9个数字直到字符串结尾\d*
匹配可选数字(
捕获第一组
(\d)
捕获第二组,匹配一个数字(?!\2)\d
负向先行断言,断言捕获的第二组字符不与当前字符相同。如果相同,则匹配一个数字)
关闭第一组\1{3}
重复捕获的第一组内容3次\d*
匹配可选数字$
匹配字符串结尾^(?=\d{9}$)\d?((\d)(?!\2)\d)(?:\d?\1){3}\d?$
这个正则表达式,它是为了允许随机数字出现在任何地方而做了一些小改动,因为捕获的数字不必按顺序排列(4次)。无论如何,这就是我的理解。 - JvdVMy first guess from OP's self tried regex ^5(\d)(?=\d\1).+
without any own additions was a regex is needed to verify numbers starting with 5
and followed by 4 pairs of same two digits.
^5(\d\d)\1{3}$
The same idea with the "added guess" to disallow all same digits like e.g. 511111111
^5((\d)(?!\2)\d)\1{3}$
Guessing further that 5
is a variable value and assuming if one variable at start/end with the idea of taking out invalid values early - already having seen the other nice provided answers.
^(?=\d?(\d\d)\1{3})\d{9}$
Solution 3 with solution 2's assumption of two different digits in first pairing.
^(?=\d?((\d)(?!\2)\d)\1{3})\d{9}$
5
后面跟着4个相同的数字对,我会使用^5(\d\d)\1{3}$
。 - bobble bubble