调整在电话号码上使用Preg_Match()

时间:2011-10-23 12:36:03

标签: php regex preg-match

我正在使用preg_match从一段文字中提取美国电话号码的各个部分。 我已经可以提取该号码了。但我想让match[0]仅包含电话号码。

问题:我的模式很接近,但我需要一些帮助来摆脱电话号码之前的任何文字。如何摆脱前面的字符串"Hey my phone is "

PHP代码

$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 个答案:

答案 0 :(得分:5)

只需删除:.*?

来自你的正则表达式。如果你不需要它,为什么要匹配呢?

答案 1 :(得分:2)

您捕获文本部分,因为您匹配它。这是领先的.*?

删除它,或在其后面添加\K