正则表达式搜索和替换

时间:2010-06-02 10:31:38

标签: php regex preg-match-all

这是一些代码

<br />  <br />  <br />   <br /> <br />  <br /> 

但是

我想要替换

<br /> fourth with <hr />

此输出

<br />  <br />  <br />   <hr />  <br />   <br /> 

请帮帮我

4 个答案:

答案 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);


?>

输出(as seen on 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

答案 2 :(得分:0)

对于这个具体案例:

s/<br \/> 4/<hr \/> 4/

答案 3 :(得分:0)

无需使用正则表达式。

echo str_replace(' <br /> 4', ' <hr /> 4', $str);