所以,我有一个正则表达式搜索HTML标签并稍微修改它们。它工作得很好,但我需要对我找到的最后一个结束HTML标记做一些特别的事情。不确定最好的方法。我正在考虑某种反向注册,但还没有办法做到这一点。到目前为止,这是我的代码:
$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';
$pattern = array('/<([A-Z][A-Z0-9]*)(\b[^>]*)>/i');
$replace = array('<tag>');
$html = preg_replace($pattern,$replace,$html);
// Outputs: <tag><tag>This is a test</p></div>
我想用<tag>
替换<end_tag>
的最后一次出现,例如{{1}}。
有什么想法吗?
答案 0 :(得分:0)
如果我读得正确,你想在文件中找到最后一个结束标签。
您可以找到最后一次出现的</*>
,其中不再有'&lt;&gt;'之后的人物。这将是最后一个标记,假设所有剩余的尖括号都编码为<
和>
:
<?php
$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';
// Outputs:
// '<div id="test"><p style="hello_world">This is a test.</p></tag>'
echo preg_replace('/<\/[A-Z][A-Z0-9]*>([^<>]*)$/i', '</tag>$1', $html);
这会将</div>
替换为</tag>
,并保留最终结束标记后的所有内容。
我不知道为什么你只想用结束标记来做这个,就像你改变它一样,你也必须改变匹配的开始标记。此外,这将无法找到最后一个自动结束标记,例如<img />
或<br />
。
答案 1 :(得分:0)
我相信这种方法与@meager的效果相同,但更简洁:
<?php
$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';
$readmore = ' <a href="/foo/bar">Read More…</a>';
// Outputs:
// '<div id="test"><p style="hello_world">This is a test.</p> <a href="/foo/bar">Read More…</a></div>'
echo preg_replace('#</\w>\s*$#', $readmore .'$1', $html);
?>