从电话号码中提取业务分机的正则表达式


A regular expression to extract a business extension from a phone number

我花了最长的时间试图编写一个正则表达式,从完整的电话号码字符串中提取电话扩展名。这应该适用于这样的数字:777.777.7777 x 7302

它还应该使用"ext"、"ext"、"ext"、"ext"、"ext."answers"ext"。基本上只涵盖了它的所有共同用途。

我只需要"x 7302"部分。事实上,一旦我提取它,我只会把它剥离成分机号

有人能帮我吗?当正则表达式变得更复杂时,我很难处理它们。

我在一个PHP函数(preg_match)中这样做,如果这对任何人都有帮助的话。

这可能有助于为您提供一些可以玩的东西:

$phonenumber = '777.777.7777 x 7302';
$extension = preg_replace('(^.*(ext|x) ?([0-9]+)$)i', '$2', $phonenumber);
echo $extension;

使用i修饰符(在末尾)使正则表达式不区分大小写,以便匹配ext的所有组合。我使用了一个小组来提供两种变体:extx:(ext|x)

其余部分在末尾查找数字,EXT和数字之间可能有空格。

尝试使用regex:

/e?xt?'.?'s*'d+$/i 
<?
echo "<pre>";
     $phone = '777.777.7777 x 7302'; 
        preg_match("/e?xt?'.?'s*'d+$/i", $phone, $matched); 
        print_r($matched);
?>

输出:

Array
(
    [0] => x 7302
)
'w+'s*'d+$

这是一个更简单的正则表达式,假设输入与您提供的内容相似。

这应该可以为您完成

/(['d'-'.]+)([ext'. ]+)('d+)/i

第一组匹配用短划线或点分隔的数字。第二个集合与您的分机字符串匹配,第三个集合与分机号匹配。

如果你只想要字符串的最后一个数字,你可以使用:

'D+('d+)$

'D+至少一个非数字后跟:

('d+)至少一位(使用括号捕获)

字符串末尾的$

我对正则表达式有点怀疑,所以当我说,是否可以使用PHP函数"explode()",使用"x"字符作为分隔符来分割字符串时,我有点偏见?

如果你不熟悉这个函数,这里有一个链接到PHP手册:

分解()

试试这个函数:

$pn = "777.777.7777 x 7302"; 
function get_ext($pn)
{
$ext = preg_replace('/['d'.'s]+[ext's]+('d{1,})/i', '$1', $pn);
return $ext;
}
echo get_ext($pn);
//7302