我目前有以下正则表达式:
preg_match_all('/(\d+)/', $bio, $matches);
这将匹配连续的数字,例如1928371921,但是我想要匹配以下格式的内容。
0812-123-1288
或
0812 123 1288
修改上述正则表达式以处理此类情况的最佳方法是什么?
答案 0 :(得分:1)
有了这个:
^\d+(?:[ -]\d+)*$
见demo。
如果您不想验证字符串是否正确,请删除^
和$
<强>解释强>
^
锚点断言我们位于字符串的开头\d+
匹配一个或多个数字(?:[ -]\d+)
匹配空格或短划线后跟一些数字...... *
匹配此次零次或多次$
锚点断言我们位于字符串的末尾
在PHP中:
$regex = '~^\d+(?:[ -]\d+)*$~';
if (preg_match($regex, $yourstring, $m)) {
$match = $m[0];
}
答案 1 :(得分:1)
您可以使用以下内容:
preg_match_all('/\d+(?:[- ]\d+)*/', $bio, $matches);