0

preg_replace を使用して、大量のテキストのコンテナ パラグラフの上に画像を移動したいと考えています。

だから、私は持っているかもしれません

$body = '<p><img src="a" alt="image"></p><img src="b" alt="image"><p>something here<img src="c" alt="image"> text</p>'

私が欲しいもの(40フィートのヨットなどを除く);

<img src="a" alt="image"><p></p><img src="b" alt="image"><img src="c" alt="image"><p>something here text</p>

私はこれを持っていますが、うまくいきません。

$body = preg_replace('/(<p>.*\s*)(<img.*\s*?image">)(.*\s*?<\/p>)/', '$2$1$3',$body);

それは次のようになります。

<img src="c" alt="image"><p><img src="a" alt="image"></p><img src="b" alt="image"><p>something here text</p>
4

1 に答える 1

0

HTML をロードし、DOMDocumentその操作を使用してノードを移動する必要があります。

$content = <<<EOM
<p><img src="a" alt="image"></p>
<img src="b" alt="image"><p>something here<img src="c" alt="image"> text</p>
EOM;

$doc = new DOMDocument;
$doc->loadHTML($content);
$xp = new DOMXPath($doc);

// find images that are a direct descendant of a paragraph
foreach ($xp->query('//p/img') as $img) {
        $parent = $img->parentNode;
        // move image as a previous sibling of its parent
        $parent->parentNode->insertBefore($img, $parent);
}

echo $doc->saveHTML();
于 2013-05-23T03:14:45.297 に答える