我的正则表达式有一个小问题,我用它从强大的电话号码中提取电话号码
<?php
$output = "here 718-838-3586 there 1052202932 asdas dasdasd 800-308-4653 dasdasdasd 866-641-6949800-871-0999";
preg_match_all('/\b[0-9]{3}\s*[-]?\s*[0-9]{3}\s*[-]?\s*[0-9]{4}\b/',$output,$matches);
echo '<pre>';
print_r($matches[0]);
?>
Run Code Online (Sandbox Code Playgroud)
输出
Array
(
[0] => 718-838-3586
[1] => 1052202932
[2] => 800-308-4653
[3] => 866-641-6949
[4] => 800-871-0999
)
Run Code Online (Sandbox Code Playgroud)
这个工作正常,但它返回 1052202932 作为我不需要的结果之一。
实际上我不知道我的模式中缺少的部分在哪里。
之后?的每一个[-]都是可选-的。如果您希望它是必需的,您只需删除它?即可使其成为必需的。另外,[-]相当于-我删除了不必要的字符类:
preg_match_all('/\b[0-9]{3}\s*-\s*[0-9]{3}\s*-\s*[0-9]{4}\b/',$output,$matches);
Run Code Online (Sandbox Code Playgroud)
您还可以将所有[0-9]内容替换\d为以进一步缩短它:
preg_match_all('/\b\d{3}\s*-\s*\d{3}\s*-\s*\d{4}\b/',$output,$matches);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12004 次 |
| 最近记录: |