正则表达式搜索和替换
这是一些代码正则表达式搜索和替换
<br /> <br /> <br /> <br /> <br /> <br />
但
我想更换
<br /> fourth with <hr />
而这种输出
<br /> <br /> <br /> <hr /> <br /> <br />
请帮我
也许这样的事情是你想要什么:
<?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
感谢您的回复 但我想只替换一个位置。 – Thoman 2010-06-02 10:58:53
@Thoman:'preg_replace'有一个'limit'参数;只需将其设置为“1”(http://ideone.com/HKpjj) – polygenelubricants 2010-06-02 11:03:19
非常感谢您的帮助 – Thoman 2010-06-02 11:07:20
这种方法仅对于给定的情况下:
preg_replace("#<br /> 4#", "<hr /> 4", $str);
如果你正在寻找一个通用的解决方案,RegEx is not the best tool了点。使用HTML/XML解析器。
你好,我已经编辑我的代码 – Thoman 2010-06-02 10:44:08
没有必要使用正则表达式。
echo str_replace(' <br /> 4', ' <hr /> 4', $str);
你的问题是难以理解的,请解释一下你想要做什么。并显示你到目前为止。 – SilentGhost 2010-06-02 10:39:04
我想在不同的位置替换相似的主题短语 – Thoman 2010-06-02 10:48:57
正如Amarghosh在下面所说的,最好的办法是使用HTML/DOM解析器而不是正则表达式。 – richsage 2010-06-02 11:01:25