Preg_match_all表现得很奇怪

时间:2014-03-09 09:49:05

标签: php regex preg-match-all

我是PHP新手,我有以下代码,我基本上希望找到

之间的所有关键字
  

'<#'和'#>'

示例代码:

<?php

$subject = "askdbvbaldjbvasdblasdbvl<#2134#>cbkdbskbkabdvb<#213aca4#>";
$pattern = "/(?<=\<\#)(.*?)(?=\#\>)/";
preg_match_all($pattern, $subject, $matches);
echo '<pre>',print_r($matches,true),'</pre>';

?>

现在我期待一个像:

这样的值数组
Array
(
    [0] => Array
        (
            [0] => 2134
            [1] => 213aca4
        )
)

但我得到的输出如下:

Array
(
    [0] => Array
        (
            [0] => 2134
            [1] => 213aca4
        )

    [1] => Array
        (
            [0] => 2134
            [1] => 213aca4
        )

)

任何人都可以告诉我为什么我得到第二个数组,我怎么能摆脱它...

1 个答案:

答案 0 :(得分:3)

第二个数组包含子匹配或匹配的组,因为您正在使用捕获组。

只需删除正则表达式中的parens:

$pattern = "/(?<=\<\#).*?(?=\#\>)/";

此外,您应该能够使用此正则表达式而不会有任何遗漏:

$pattern = "/(?<=<#).*?(?=#>)/";