我花了最长的时间试图编写一个正则表达式,从完整的电话号码字符串中提取电话扩展名。这应该适用于这样的数字: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
的所有组合。我使用了一个小组来提供两种变体:ext
或x
:(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