为html元素匹配属性的Regexp

为html元素匹配属性的Regexp,regex,Regex,我正在使用正则表达式模式从html元素中提取标记和属性。但是我在匹配属性时遇到了一些问题:s。只有最后一个属性存储到matches数组中 代码如下: <?php $subject = '<font face="arial" size="1" color="red">hello world!</font>'; $find= '/<(?P<tag>\w+)\s+((?P<attr>\w+)=(?P<value>[

我正在使用正则表达式模式从html元素中提取标记和属性。但是我在匹配属性时遇到了一些问题:s。只有最后一个属性存储到matches数组中

代码如下:

<?php
    $subject = '<font face="arial" size="1" color="red">hello world!</font>';
    $find= '/<(?P<tag>\w+)\s+((?P<attr>\w+)=(?P<value>[^\s""\'>]+|"[^"]*"|\'[^\']*\')\s*)*\/?>/si';

    preg_match_all( $find, $subject, $matches );
?>
一些要点:

  • 您不应该使用正则表达式来解析HTML。PHP有许多优秀的HTML解析库
  • 在比赛中重复捕获的组只保留最后一次捕获。
    • 一个值得注意的例外是.NET正则表达式
工具书类
相关问题
  • (是的!.NET保留所有中间捕获!)

放下它,改用它。你无法用正则表达式可靠地解析HTML。在这里可以看到关于这个主题的令人敬畏的咆哮:但是如果我想将html解析为xhtml呢?我读到xpath与xhtml兼容。这是更好的解读:-捕获重复组与重复捕获组。