0

所以,这感觉很傻,但我无法理解它。

我正在尝试从日志文件中捕获 id-code 和 name,示例归结为

$line = "exten => 3002,2,Dial(/dev/null,20); Name Here";
$match = "/exten => ([0-9]{4}),2,Dial\(\/dev\/null,20\); ([\w]*)/Us";

if (preg_match($match, $line, $result))
{
    var_dump($result);  
}

我想抓住的地方3002Name Here。我得到的输出是这个

array(3) {
  [0]=>
  string(36) "exten => 3002,2,Dial(/dev/null,20); "
  [1]=>
  string(4) "3002"
  [2]=>
  string(0) ""
}

这感觉有点愚蠢,但我很茫然,所以..我可以帮忙吗?

4

2 回答 2

2

我的第一个想法:

...([\w]*)/Us";
        ^  ^
        |  |
        |  \_ Ungreedy
        |
         \_ Zero or more

编辑:

如果您只想要该行的其余部分:

$match = "/exten => ([0-9]{4}),2,Dial\(\/dev\/null,20\); (.+)$/Us";
                                                         ^^^^^
于 2012-06-01T09:19:53.317 回答
0

问题肯定是 : ([\w]*) 最后。

\w 不会匹配 whitespace ,并且 "Name Here" 有空格。

我会推荐 ([\w\s]*) 来匹配“Name Here”

于 2012-06-01T09:26:49.913 回答