2

</body>HTMLのページの最後のタグを置き換えたい。ページには(iFrameのために)多くのタグがあるので、最後のものだけを置き換える必要があります。

たとえば、私がこのコードを持っていた場合:

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

最後の</body>タグを別のものに置き換える必要があります。

私はやろうとしましpreg_replace("~(?!.*</body>)~",$replace_with,$content);たが、うまくいきませんでした。

何か案は?

4

1 に答える 1

4

貪欲な量指定子を活用し、1 つの高度な手法を使用します。

~.*\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 に答える