php - 正则表达式从字符串中提取电话号码

时间:2015-11-04 12:18:06

标签: php regex

我的正则表达式有一个小问题,我用来从字符串中提取意大利语电话号码

<?php
$output = "+39 3331111111";
preg_match_all('/^((00|\+)39[\. ]??)??3\d{2}[\. ]??\d{6,7}$/',$output,$matches);
echo '<pre>';
print_r($matches[0]);
?>

如果$output只是电话号码,但是如果我用更复杂的字符串更改输出,它可以正常工作:

(例如$output = "hello this is my number +39 3331111111 how are you?";

它不会提取数字,如何更改我的正则表达式以提取数字?

1 个答案:

答案 0 :(得分:3)

删除锚点并在正确的位置添加单词边界\b

((\b00|\+)39[\. ]??)??3\d{2}[\. ]??\d{6,7}\b
   ^                                       ^

请参阅regex demo

请参阅IDEONE demo

$output = "hello this is my number +39 3331111111 how are you?";
preg_match_all('/((\b00|\+)39[\. ]??)??3\d{2}[\. ]??\d{6,7}\b/',$output,$matches);
echo '<pre>';
print_r($matches[0]);

您还可以使用非捕获组(“清理”输出一点)和贪婪的?而不是惰性??(正则表达式会更有效):

(?:(?:\b00|\+)39[\. ]?)?3\d{2}[\. ]?\d{6,7}\b
 ^^ ^^               ^ ^           ^

请参阅another regex demo