У меня есть небольшая проблема с моим регулярным выражением, которое я использую для извлечения итальянских телефонных номеров из строки
<?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?";
)
он не будет извлекать номер, как я могу изменить свое регулярное выражение, чтобы извлечь номер?
Удалите анкеры и добавьте границы слов \b
в нужные места:
((\b00|\+)39[\. ]??)??3\d{2}[\. ]??\d{6,7}\b
^ ^
См. Демо-версию regex.
См. Демонстрацию IDEONE:
$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
^^ ^^ ^ ^ ^