2

我想替换 H </body>​​TML 页面上的最终标签。页面上有很多标签(因为 iFrames),所以我只需要替换最后一个。

例如,如果我有这个代码:

</body>
</body>
</body>
</body>

我需要</body>用其他东西替换最后一个标签。

我曾尝试这样做preg_replace("~(?!.*</body>)~",$replace_with,$content);,但效果不佳。

有任何想法吗?

4

1 回答 1

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>
于 2013-04-12T22:17:28.920 回答