这是一些代码
<br /> <br /> <br /> <br /> <br /> <br />
但是
我想要替换
<br /> fourth with <hr />
此输出
<br /> <br /> <br /> <hr /> <br /> <br />
请帮帮我
答案 0 :(得分:1)
这仅适用于特定情况:
preg_replace("#<br /> 4#", "<hr /> 4", $str);
如果您正在寻找通用解决方案,RegEx is not the best tool就是这样。使用HTML / XML解析器。
答案 1 :(得分:1)
也许这就是你想要的东西:
<?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);
?>
<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
答案 2 :(得分:0)
对于这个具体案例:
s/<br \/> 4/<hr \/> 4/
答案 3 :(得分:0)
无需使用正则表达式。
echo str_replace(' <br /> 4', ' <hr /> 4', $str);