这是一些代码
<br /> <br /> <br /> <br /> <br /> <br />
但
我要换
<br /> fourth with <hr />
而这个输出
<br /> <br /> <br /> <hr /> <br /> <br />
请帮我
这是一些代码
<br /> <br /> <br /> <br /> <br /> <br />
但
我要换
<br /> fourth with <hr />
而这个输出
<br /> <br /> <br /> <hr /> <br /> <br />
请帮我
这仅适用于给定的情况:
preg_replace("#<br /> 4#", "<hr /> 4", $str);
如果您正在寻找通用解决方案,RegEx 并不是最好的工具。使用 HTML/XML 解析器。
也许这样的事情是你想要的:
<?php
$text = <<<EOT
<br /> 1 <br /> 2 <br /> 3 <br /> 4 <br /> 5 <br /> 6
<br /> 7 <br /> 8 <br /> 9 <br /> 10 <br /> 11 <br /> 12
<br /> 13 <br /> 14 <br /> 15 <br /> 16 <br /> 17 <br /> 18
EOT;
$tag = '<br \\/>';
$content = '[^<]*';
print preg_replace("/($content(?:$tag$content){3})$tag/", '$1<BREAK! />', $text);
?>
输出(如在 ideone.com 上看到的):
<br /> 1 <br /> 2 <br /> 3 <BREAK! /> 4 <br /> 5 <br /> 6
<br /> 7 <BREAK! /> 8 <br /> 9 <br /> 10 <br /> 11 <BREAK! /> 12
<br /> 13 <br /> 14 <br /> 15 <BREAK! /> 16 <br /> 17 <br /> 18
也就是说,这很痛苦,你真的不应该为此使用正则表达式。
如果您只想进行一次替换,可以将limit
参数设置为preg_replace
:
preg_replace("/($content(?:$tag$content){3})$tag/", '$1<BREAK! />', $text, 1);
^^limit
对于这种特定情况:
s/<br \/> 4/<hr \/> 4/
无需使用正则表达式。
echo str_replace(' <br /> 4', ' <hr /> 4', $str);