preg_match_all多个模式留下空数组值

时间:2016-05-31 17:41:28

标签: php arrays pattern-matching preg-match-all

我试图了解preg_match_all里面有多个模式,所以我创建了html字符串变量和模式。

像修剪一样的工作正常,但由于多种模式,它会输出一些空值的数组键。如果您知道为什么会这样,请告诉我并告诉我如何修复它。

我的代码:

<?php
        $cource = "<div><a href='test1'>  <img src=\"test2\" /> <img src='test3' > <script src='test4'> <link href='test5'> </div>";

        preg_match_all('/src=["\']([^"\']+)|href=\'([^\']+)/',$cource, $result); 

        var_dump($result);
?>

输出:

enter image description here

1 个答案:

答案 0 :(得分:0)

由于使用两个捕获组,您将获得空值

  • 1st适用于src
  • 第二个是href

因此根据您的数据得到空值,因为第一个元素的属性hrefsrc空白(因为它没有它)所以依此类推。

您可以在一个捕获(第二)组中获取结果,首先留下一个用于获取其取自哪些属性的参考。

$cource = "<div><a href='test1'>  <img src=\"test2\" /> <img src='test3' > <script src='test4'> <link href='test5'> </div>";

preg_match_all('/(href|src)=["\']([^"\']+)/',$cource, $result); 

如果您不需要参考属性,可以使用非捕获组?:

preg_match_all('/(?:href|src)=["\']([^"\']+)/',$cource, $result); 

行动中:https://eval.in/580585