php - regex для извлечения телефонных номеров из строки

1

У меня есть небольшая проблема с моим регулярным выражением, которое я использую для извлечения итальянских телефонных номеров из строки

<?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 ответ

3
Лучший ответ

Удалите анкеры и добавьте границы слов \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
 ^^ ^^               ^ ^           ^

См. Еще одну демо-версию regex

  • 1
    это работает, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню