4

<br>2 つの画像間の複数または<br/>タグを 1 つだけに減らす必要があります。画像内のあらゆる種類の属性情報、あらゆる要素間のあらゆる種類の空白、および 2 つの形式の区切りに遭遇するのに十分なほど自由である必要があります。<br/>前後のタグには影響を与えたくないので注意してください<img>。2 つの画像の間のタグにのみ影響を与えます。

これは私が使用しているものです:

$content = preg_replace('/(<img[^>]*>)+\s*?(<br\/?>\s*?)+\s*?(<img[^>]*>)+/is','$1<br/>$3',$content);

これが例です

    ...
    Some text here.<br>
    <br><img src="http://www.domain.tld/image1.jpg"><br>
    <img src="http://www.domain.tld/image2.jpg"><br><br/>
    <img src="http://www.domain.tld/image3.jpg">
</div>

<br>パターンは、image2 と image3 の間の 2 つの x タグのみを置き換える必要があります。

なぜ私のパターンがうまくいかないのか分かりません。

助けてくれてありがとう!

編集 参考までに、私は $content の元のソース マテリアルを制御できません。

4

2 に答える 2

2

これはうまくいくはずです:

preg_replace('/(<img[^>]*>\s*)(<br\s*\/?>(\s*))*(?=<img)/si', '\\1<br/>\\3', $content);
于 2012-11-19T15:22:50.933 に答える
1

img問題は、最初の2つのタグで構成される最初の一致と次の潜在的な一致(最後の2つ)の間に重複があることです。代わりに、この正規表現を使用してみてください。

(<img[^>]*>)+\s*?(<br\/?>\s*?){2,}\s*?(<img[^>]*>)+

ここでそれを参照してください:http://rubular.com/r/89UGSRaWOX

問題をより明確に理解するために、文字列aaaaを正規表現と照合する類似のケースを考えてみましょうaa。ここには3つの可能な一致があります:

  1. aa aa
  2. a aa a
  3. aa aa

ただし、2つ目はオーバーラップであるため、見つかった一致は次のとおりです。

  1. aa aa
  2. aa aa

ここでそれを参照してください:http://rubular.com/r/DwfGodT08R

于 2012-11-19T15:28:00.203 に答える