Твик для использования Preg_Match () на телефонные номера - PullRequest
3 голосов
/ 23 октября 2011

Я использую preg_match для извлечения различных разделов телефонного номера из США из абзаца текста. Я уже могу извлечь номер. Но я хочу, чтобы match[0] включал только номера телефонов.

Проблема: Мой шаблон подходит, но мне нужно немногопомочь избавиться от того, что текст перед номером телефона.Как избавиться от предыдущей строки "Hey my phone is "?

PHP Code

$pattern = '/.*?(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})'
    .'(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})'
    .'[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?.*?/';;

$subject = 'Hey my phone is 911-628-4539, call me tonight at 9:16:00pm, my room is 122-1001';

preg_match($pattern, $subject, $match);

print_r($match);

Вывод

Array ( [0] => Hey my phone is 911-628-4539 [1] => 911 [2] => 628 [3] => 4539 ) 

Ответы [ 2 ]

5 голосов
/ 23 октября 2011

Просто удалите: .*?

от вашего регулярного выражения. Если вам это не нужно, зачем сопоставлять?

2 голосов
/ 23 октября 2011

Вы захватываете текстовую часть, потому что вы соответствуете ей.Это ведущий .*?, который делает это.

Либо удалите это, либо добавьте \K прямо за ним.

...