我的正则表达式有一个小问题,我用来从字符串中提取意大利语电话号码
<?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?";
)
它不会提取数字,如何更改我的正则表达式以提取数字?
答案 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
^^ ^^ ^ ^ ^