我想替换HTML页面上的最终</body>
标记。页面上有很多标签(因为iFrames),所以我只需要替换最后一个。
例如,如果我有这段代码:
</body>
</body>
</body>
</body>
我需要用其他内容替换最后一个</body>
标记。
我曾尝试preg_replace("~(?!.*</body>)~",$replace_with,$content);
,但效果并不好。
有什么想法吗?
答案 0 :(得分:4)
我们将利用贪婪量词并使用一种先进技术:
~.*\K</body>~s
一些解释:
~ # A simple delimiter
.* # Match anything greedy (until the end)
\K # Forget what we matched until now
</body> # Match ¨</body>¨
~ # The closing delimiter
s # The s modifier to also match newlines with the dot ¨.¨
PHP实现可能如下所示:
$str = '
</body>
Something !
</body>
</body>
</body>
</body>
</html>';
$search = '</body>';
$replace = '</replaced>';
$str = preg_replace('~.*\K'. preg_quote($search, '~') . '~s', '$1' . $replace, $str);
echo $str;
请注意,我们使用preg_quote()
来转义可能会从不受信任的用户使用的相应字符。
输出:
</body>
Something !
</body>
</body>
</body>
</replaced>
</html>