Php 替换一个<;br/>;带2个正则表达式

Php 替换一个<;br/>;带2个正则表达式,php,regex,Php,Regex,我有一根绳子 $str = 'bob<br /><br />looked so good<br />tonight!'; $str='bob今晚看起来真好; 我想将只有一个的任何实例替换为两个 现在我已经 echo preg_replace('/(<br \/>\s*){1}/', '<br /><br />', $str); echo preg\u replace('/(\s*){1}/','',$str); 但这

我有一根绳子

$str = 'bob<br /><br />looked so good<br />tonight!';
$str='bob

今晚看起来真好;
我想将只有一个

的任何实例替换为两个

现在我已经

echo preg_replace('/(<br \/>\s*){1}/', '<br /><br />', $str);
echo preg\u replace('/(\s*){1}/','

',$str);
但这是在bob之后放两个

,而它应该只放在good之后

任何帮助都会很好

编辑:输出应为

bob<br /><br />looked so good<br /><br />tonight!
bob

今晚看起来很好


基本上,您需要一个

标记,该标记不在前面,也不紧跟在后面。因此:

/(?<!<br \/>)<br \/>(?!<br \/>)/
/(?)(?!)/

这假设所有的

标记都是字面意义上的

,而不是


,甚至是

。为了更好地进行解析,您应该使用DOM解析器并查找另一个
BR
节点之前或之后不紧跟另一个
BR
节点的
BR
节点。

您指定要匹配一个
节点,并将其替换为两个

这不是您想要的-如果后面没有相同内容的第二个,您只想添加一个额外的

试一试

echo preg\u replace('/(\s*){1}([^这将

中的任何数字(大于零)替换为两个:

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!"
$str='bob

今晚看起来很好!






再见; 打印preg_替换(“|”(?:
)+|,“

,$str”); #输出:“鲍勃今晚看起来很好,再见!”
使用函数的第五个参数-count,包含匹配项…如果count大于1,则进行比较,




会保持不变吗?不要使用正则表达式来处理HTML,因为HTML不是一种常规语言。你最终会后悔的。使用HTML库。我不会添加HTML忘了它也就是说,我试图找到一个单词的1个实例,并用2个替换它。
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!"