0

我认为我的做法是错误的,但这就是我正在做的事情。

我有一个从我的 PBX 传递给我的字符串,我试图只获取电话号码,甚至双引号内的文本(如果存在)。

<?php
  $string = '"John Smith" <sip:15558740205@pbx.domain.co:5060;user=phone>';
?>

我很肯定使用正则表达式的形式会更好地在单独的变量中获取数字和名称,但是由于我还不太擅长正则表达式,所以我求助于explode()

我对它的处理不太好,并且在@标志处爆炸字符串变得很乱,然后在:. 这留下了名字。

我将如何去除<sip:之前的数字@

4

5 回答 5

1

您可能想要做的第一件事是将(使用正则表达式)拆分为之前和之后的部分<sip:

^(.*?)\s*<sip\:(.+)>\s*$

\s*表示跳过任何空格(如果有)。

匹配的电话号码是:\d+[0-9]{1,}或您喜欢的任何组合。

""如果您可以相信它们始终存在,那么匹配的内容将是微不足道的:\s*"([^"]+)"\s*或者如果它们只是可选的,则更糟:\s*(?:"([^"]+)"\s*)?

所以让我们把它们放在一起:

$regex = '~^\s*(?:"([^"]+)"\s*)?<sip:(\d+)@.+>\s*~i';
$matches = array();
if( preg_match($regex, $string, $matches)){
    list(, $name, $phone) = $matches;
}
于 2013-07-16T07:32:02.183 回答
0

以下是使用正则表达式的方法:

preg_match('/(?:"([^"]*)")?\s*<.*sip:(\d+\)/', $string, $match);
$name = $match[1];
$phone = $match[2];
于 2013-07-16T07:24:40.517 回答
0
<sip:([0-9]{1,})@

是你需要的正则表达式

preg_match('/".*?" <sip:([0-9]+)@/', $string, $matches); 
//matches[1] contains the name
//matches[2] contains the number
于 2013-07-16T07:25:48.987 回答
0
if (preg_match('/^(?:\"([^\"]+)\" )?\<sip\:(\d+)\@/i', $string, $matches))
    list(, $name, $phone) = $matches;
于 2013-07-16T07:27:27.103 回答
-1
check this

<?php

  $string = '"John Smith" <sip:15558740205@pbx.domain.co:5060;user=phone>';

  $first = explode("<sip:", $string);

  $second =  explode("@", $first[1]);

  echo $second[0];
?>
于 2013-07-16T07:24:31.937 回答