我正在尝试制作一个正则表达式模式来搜索一个12位数的字符串。该号码可以在我正在寻找的号码前面或后面有任意数量的其他字符(但不是数字)。
到目前为止,我有/([0-9]{12})/
正确找到12位数字,但它也会匹配字符串中的13位数字。
模式应与以下字符串上的123456789012
匹配
它应该匹配这些字符串上的任何内容:
答案 0 :(得分:2)
你想要的是环顾四周。类似的东西:
/(?<![0-9])[0-9]{12}(?![0-9])/
如果模式前面或后面跟着另一个模式,前瞻或后视匹配,而不消耗该模式。因此,如果这些模式之前或之后没有更多数字,则它将匹配12位数字,而不会消耗数字前后的字符。
答案 1 :(得分:2)
/\D(\d{12})\D/
(在这种情况下,数字将是捕获索引1)
编辑:哎呀,如果数字是整个字符串那么一个不起作用。请改用下面的
或者,使用负面的后视和前瞻:/(?<!\d)\d{12}(?!\d)/
(其中数字将是捕获索引0)
if( preg_match("/(?<!\d)\d{12}(?!\d)/", $string, $matches) ) {
$number = $matches[0];
# ....
}
其中$string
是您正在测试的文字