Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何用破折号或空格来匹配数字_Php_Regex - Fatal编程技术网

Php 如何用破折号或空格来匹配数字

Php 如何用破折号或空格来匹配数字,php,regex,Php,Regex,我目前有以下正则表达式: preg_match_all('/(\d+)/', $bio, $matches); 这将匹配连续的数字,例如1928371921,但是我还想匹配以下格式的内容 0812-123-1288 或 修改上述正则表达式以处理此类情况的最佳方法是什么 ^\d+(?:[ -]\d+)*$ 看 如果不想验证字符串是否正是此字符串,请删除^和$ 解释 ^锚定声明我们位于字符串的开头 \d+匹配一个或多个数字 非捕获组(?:[-]\d+匹配空格或破折号,后跟一些数字 而*与此零

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

preg_match_all('/(\d+)/', $bio, $matches);
这将匹配连续的数字,例如1928371921,但是我还想匹配以下格式的内容

0812-123-1288

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

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

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

解释

  • ^
    锚定声明我们位于字符串的开头
  • \d+
    匹配一个或多个数字
  • 非捕获组
    (?:[-]\d+
    匹配空格或破折号,后跟一些数字
  • *
    与此零次或多次匹配
  • $
    锚点断言我们在字符串的末尾

在PHP中:

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

您可以使用以下选项:

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

str是否替换并删除空格和连字符?或者使用
|
管道符号在preg匹配中分隔条件cal@Ohgodwhy我想使用正则表达式一次性完成,而不使用str替换
\b([0-9-]+)\b
将与之匹配,尽管我支持删除无关字符的建议。一致形式变量
^\d+(?(?=([-])(?:\1\d+)$
FYI,添加了演示和explanation@hwnd不,我想我是在几秒钟前+1对于精神力量:)但是我们的线交叉了,你的
[-]
是我的
[-]
preg_match_all('/\d+(?:[- ]\d+)*/', $bio, $matches);