如何在中间匹配数字与短划线或空格

时间:2014-06-25 23:53:25

标签: php regex

我目前有以下正则表达式:

preg_match_all('/(\d+)/', $bio, $matches);

这将匹配连续的数字,例如1928371921,但是我想要匹配以下格式的内容。

0812-123-1288

0812 123 1288

修改上述正则表达式以处理此类情况的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

有了这个:

^\d+(?:[ -]\d+)*$

demo

如果您不想验证字符串是否正确,请删除^$

<强>解释

  • ^锚点断言我们位于字符串的开头
  • \d+匹配一个或多个数字
  • 非捕获组(?:[ -]\d+)匹配空格或短划线后跟一些数字......
  • *匹配此次零次或多次
  • $锚点断言我们位于字符串的末尾

enter image description here

在PHP中:

$regex = '~^\d+(?:[ -]\d+)*$~';
if (preg_match($regex, $yourstring, $m)) {
    $match = $m[0];
    } 

答案 1 :(得分:1)

您可以使用以下内容:

preg_match_all('/\d+(?:[- ]\d+)*/', $bio, $matches);