2

紐を持っている...

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

1 つしかないインスタンス<br />を 2 つに置き換えたい。

現時点では...

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

しかし、このプットは<br />ボブの後に 2 つしかないのに、グッドの後にのみ行くべきです。

どんな助けでも素晴らしいでしょう!

編集:出力は...

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

3 に答える 3

4

基本的<br />に、別のタグが直前にも直後にもないタグが必要です。したがって:

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

<br />これは、すべてのタグが文字どおりであり、 、、または でさえ<br />ないことを前提としています。より適切に解析するには、DOM パーサーを使用して、別のノードが先行または直後にないノードを探す必要があります。<br><br/><br style="clear:both;">BRBR

于 2012-10-03T15:16:30.933 に答える
1

これにより、任意の数(ゼロより大きい)が<br />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!"
于 2012-10-03T15:18:10.093 に答える
0


1 つを一致させて 2 つに置き換えることを指定しています。


それはあなたが望むものではありません -同じものが2番目に続いていない場合にのみ余分なものを追加したいですか?

試す

echo preg_replace('/(<br \/>\s*){1}([^<])/', '<br /><br />$1', $str);

これにより、
置換する前に、一致する の後に他のタグが続かないことが保証されます。

の場合、これは置き換えられないことに注意してください。

<b>bob<br /></b> 

ただし、終了境界条件をより具体的にしたい場合がありますが、それを最後に追加し直す限り、終了境界を好きなだけ複雑にすることができます。

于 2012-10-03T15:16:53.757 に答える