我想替换 H </body>
TML 页面上的最终标签。页面上有很多标签(因为 iFrames),所以我只需要替换最后一个。
例如,如果我有这个代码:
</body>
</body>
</body>
</body>
我需要</body>
用其他东西替换最后一个标签。
我曾尝试这样做preg_replace("~(?!.*</body>)~",$replace_with,$content);
,但效果不佳。
有任何想法吗?
我想替换 H </body>
TML 页面上的最终标签。页面上有很多标签(因为 iFrames),所以我只需要替换最后一个。
例如,如果我有这个代码:
</body>
</body>
</body>
</body>
我需要</body>
用其他东西替换最后一个标签。
我曾尝试这样做preg_replace("~(?!.*</body>)~",$replace_with,$content);
,但效果不佳。
有任何想法吗?
我们将利用贪婪量词并使用一种先进的技术:
~.*\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>