【问题标题】:RegEx find all anchor tags, including ones with images [duplicate]正则表达式查找所有锚标签,包括带有图像的标签 [重复]
【发布时间】:2016-01-21 16:33:52
【问题描述】:

我正在尝试查找所有 <a> 标签并在它们周围添加一个 div。如何更改正则表达式以匹配<a><img></a> 以及<a>text</a>,或<a> 标记中的任何标记。我有:

<php

    $a_pattern = '@<a\s*.*>.*(<.*>)?.*</a>@i';
    $out = preg_replace_callback($a_pattern,"match_callback",$html);
    function match_callback($matches)
    {
         var_dump($matches);
    }

?>

【问题讨论】:

标签: php html regex preg-replace-callback


【解决方案1】:

以下是使用内置 PHP DOM 解析器的方法(使用一些假 HTML,但你会明白的):

<?php
$doc = new DOMDocument('1.0', 'UTF-8');
$doc = DOMDocument::loadHTML('<body>
     <a href="somewere"><img src="www.foo.com/example.gif" class="foo" alt="..."><br></a>
     <a href="somewere again"><img src="www.bar.com/1.jpg" class="bar" alt="..."></a>
     <a href="somewere again and back">Text</a>
     </body>
', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

foreach ($doc->getElementsByTagName('a') as $a_node) {
   $div = $a_node->ownerDocument->createElement('div');
   $node = $a_node->parentNode->insertBefore($div, $a_node);
   $node->appendChild($a_node);
}
echo $doc->saveHTML();

sample demo 的输出:

<body>
<div><a href="somewere"><img src="www.foo.com/example.gif" class="foo" alt="..."><br></a></div>
<div><a href="somewere%20again"><img src="www.bar.com/1.jpg" class="bar" alt="..."></a></div>
<div><a href="somewere%20again%20and%20back">Text</a></div>
</body>

您还可以通过以下方式添加属性:

$node->setAttribute('class', 'title');

【讨论】:

  • 感谢您的解决方案。我最终只是在 jQuery 中完成了它。
    '); }); }
猜你喜欢
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
相关资源
最近更新 更多