标题中可能的SIP:
"unknown-caller-name" <sip:unknown-ani@pbx.domain.com:5066;user=phone>
"Henry Tirta" <sip:951@domain.com>
我需要在<sip:
和@
之间提取SIP号码。使用正则表达式从php上面的标题中$from = "\"User Name\" <sip:199@pbx.testdomain.com>";
$matches = array();
$pattern = '/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/';
preg_match($pattern,$from,$matches);
$number = explode('@', $matches[0])[0];
echo $number;
。此SIP号码长度会有所不同。
{{1}}
有更好的方法吗?
答案 0 :(得分:3)
让我们简单一点:
$from = '"unknown-caller-name" <sip:unknown-ani@pbx.domain.com:5066;user=phone>';
if(preg_match('#<sip:(.*?)@#', $from, $id)){
echo $id[1];
}else{
echo 'no match';
}
<强>解释强>
<sip:
:匹配<sip:
(.*?)
:匹配并将所有内容分组,直到...... @
:@
已找到/匹配。答案 1 :(得分:0)
我不知道这是不是更好的方法,但我做了更短的事情,我在正则表达式中使用了一个命名组
<?php
$pattern='/^(.*) <sip\:(?P<number>[0-9]+)@(.*)>$/';
$subject='"User Name" <sip:199@pbx.testdomain.com>';
preg_match($pattern,$subject,$matches);
echo $matches["number"];
?>
您可以通过更改(。*)部分来改进表达式,但我不知道您是否需要特定于此的部分
我希望这会对你有所帮助,祝你的代码好运
答案 2 :(得分:0)
$string = '"User Name" <sip:199@pbx.testdomain.com>';
preg_match('/^(?:\"([^\"]+)\" )?\<sip\:(\d+)\@/i', $string, $matches);
// Output
array (size=3)
0 => string '"User Name" <sip:199@' (length=21)
1 => string 'User Name' (length=9)
2 => string '199' (length=3)