preg_match_all 多个模式留下空数组值

preg_match_all multiple pattern leaves empty array values

我试图通过其中的多个模式来理解 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);
?>

输出:

由于使用了两个捕获组,您得到的是空值,

  • 第一个是 src
  • 第二个是 href

因此,根据您的数据,您得到的是空值,因为第一个元素具有属性 href,您得到 src 空白(因为它没有)等等。

您可以在一个捕获(第二)组中获取结果,第一个留作参考,用于获取它的属性。

$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