正则表达式:如何匹配数字?

时间:2013-03-11 18:46:37

标签: php regex regex-lookarounds

我想使用正则表达式来匹配这些数字:

58158
60360
98198

格式为ABCAB

我使用下面的代码来匹配ABAB

(([\d]){1,}([\d]){1,})\1{1,}

5858但如何匹配ABCAB(58158)?

2 个答案:

答案 0 :(得分:4)

对于ABCAB格式的数字:

(\d)(\d)\d\1\2

这对A=B=C没有限制。将negative look-ahead用于A!=B!=C

(\d)(?!\1)(\d)(?!\1|\2)\d\1\2

修改

没有边界匹配,因此58158中将匹配36958158

$num=36958158;
preg_match('/(\d)(?!\1)(\d)(?!\1|\2)\d\1\2/',$num,$match);
echo ">>> ".$match[0];

>>> 58158

答案 1 :(得分:0)

要匹配ABCAB表单中的整数,请使用\b(\d\d)\d(\1)\b

\b是单词边界,\1引用第一组。

示例(在JavaScript中,以便可以在浏览器中进行测试,但它适用于大多数正则表达式解决方案):

var matches = '58158 22223 60360 98198 12345'.match(/\b(\d\d)\d(\1)\b/g);

给出

["58158", "60360", "98198"]