我有一个字符串......
$str = 'bob<br /><br />looked so good<br />tonight!';
我想替换只有一个<br />
和两个的实例。
此刻我......
echo preg_replace('/(<br \/>\s*){1}/', '<br /><br />', $str);
但是,这只是两个<br />
之后的事情,它应该只追求好。
任何帮助都会很棒!
修改:输出应为...
bob<br /><br />looked so good<br /><br />tonight!
答案 0 :(得分:4)
基本上,您需要一个<br />
标记,该标记不在其他标记之前或之后。因此:
/(?<!<br \/>)<br \/>(?!<br \/>)/
这假定所有<br />
代码都是<br />
而不是<br>
,<br/>
,甚至是<br style="clear:both;">
。为了更好地解析,您应该使用DOM解析器并查找BR
个节点,这些节点不会先于另一个BR
节点,也不会紧跟其后。
答案 1 :(得分:1)
这会将<br />
的任何数字(大于零)替换为两个:
print preg_replace('|(?:<br />)+|', '<br /><br />', $str);
示例:
$str = 'bob<br /><br />looked so good<br />tonight!<br /><br /><br />Bye!';
print preg_replace('|(?:<br />)+|', '<br /><br />', $str);
# output: "bob<br /><br />looked so good<br /><br />tonight!<br /><br />Bye!"
答案 2 :(得分:0)
您指定要匹配一个并将其替换为两个。
这不是你想要的 - 你只想添加一个额外的,如果那个没有跟随第二个相同的东西?
尝试
echo preg_replace('/(<br \/>\s*){1}([^<])/', '<br /><br />$1', $str);
这样可以确保您在匹配之前没有任何其他标签,更换前。
请注意,在
的情况下,这不会取代<b>bob<br /></b>
尽管如此,您可能希望更具体地了解结束边界 条件,只要你确保将它添加回到最后,就可以使结束边界变得复杂。