Php 从电话号码中提取业务扩展名的正则表达式
我正在尝试编写一个正则表达式,从完整的电话号码字符串中提取电话分机。这应该适用于这样的数字:777.777.7777 x 7302 它还应该使用“ext”、“ext”、“ext”、“ext”、“ext.”和“ext”。基本上只是涵盖了它的所有共同用途 我只需要“x 7302”部分。事实上,一旦我提取了它,我会把它剥离成分机号码 有人能帮我吗?当正则表达式变得更复杂时,我会很难处理它们Php 从电话号码中提取业务扩展名的正则表达式,php,regex,phone-number,Php,Regex,Phone Number,我正在尝试编写一个正则表达式,从完整的电话号码字符串中提取电话分机。这应该适用于这样的数字:777.777.7777 x 7302 它还应该使用“ext”、“ext”、“ext”、“ext”、“ext.”和“ext”。基本上只是涵盖了它的所有共同用途 我只需要“x 7302”部分。事实上,一旦我提取了它,我会把它剥离成分机号码 有人能帮我吗?当正则表达式变得更复杂时,我会很难处理它们 如果PHP函数(preg_match)对任何人都有帮助的话,我将在PHP函数(preg_match)中执行此操作
如果PHP函数(preg_match)对任何人都有帮助的话,我将在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和数字之间可能有一个空格
\w+\s*\d+$
这是一个更简单的正则表达式,假设输入与您提供的内容相似。这应该可以满足您的需要
/([\d\-\.]+)([ext\. ]+)(\d+)/i
第一组匹配由破折号或点分隔的数字。第二组匹配您的分机字符串,第三组匹配您的分机号码 尝试使用正则表达式:
/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);
?>
如果只需要字符串的最后一个数字,可以使用:
$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
\D+
至少有一个非数字后跟:
(\d+)
至少一位数字(使用括号捕获)
$
在字符串末尾。尝试此功能:
我对正则表达式有点怀疑,所以当我说,可以使用PHP函数“explode()”,使用“x”字符作为分隔符来拆分字符串吗 如果您不熟悉该函数,这里有一个指向该函数的PHP手册的链接:
如何
$2
将为我提供7302
,您能解释一下吗?@user:$2
包含第二组的匹配项:([0-9]+)
+1,用于明确提及i
修饰符并解释它。我觉得@themask的正则表达式可能更好,尽管我喜欢它。我感谢你的帮助。我投票给了你一个很好的答案,但我不得不选择下面的答案,因为它解决了我的问题。这里再次不同于hakre的帖子,$matched
如何从正则表达式中得到匹配的输出?我不得不说这一条对我有效。我有一个可能的模式的大列表,并把它放在列表的末尾(甚至在上面列出的另一个模式答案的下面),它是唯一找到它的。谢谢
\D+(\d+)$
$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