0

正規表現を使用して、アンカー タグ内にネストされていない画像を一致させるにはどうすればよいですか?

ここに私が欲しいものがあります:

歯が立たない: <a href="index.html"><img src="images/default.jpg" /></a>

マッチ: <div><img src="images/default.jpg" /></div>

マッチ: <img src="images/default.jpg" />

私は正規表現が得意ではありませんが、これは私がこれまでに思いついたものであり、うまくいきません:

[^<a[^>]*>]<img.*?/>[^</a>]

PHPはそれを具体的にしたいので、ルックアラウンドを使用できませんでした。

4

2 に答える 2

2

あなたの困難の背後にある理由の多くは、単純に HTML が正規の言語ではないということです

(X)HTML を処理するのに十分強力なクエリ式言語を使用するか、プログラムで DOM を使用してすべてのイメージ タグを取得し、<a>先祖を持つものを除外することを検討してください。

PHP5 では、次のDOMXPathように簡単に使用できると思います。

$generated_string = '<a href="index.html"><img src="images/inside_a.jpg" /></a>' .
                    '<div><img src="images/inside_div.jpg" /></div>' .
                    '<img src="images/inside_nothing.jpg" />';

$doc = new DOMDocument();
$doc->loadHTML($generated_string);
$xpath = new DOMXpath($doc);

$elements = $xpath->query("//*[not(self::a)]/img");

foreach ($elements as $element){
  echo $doc->saveXML($element) . "\n";
}

このコードは次の出力を提供します。

<img src="images/inside_div.jpg"/>
<img src="images/inside_nothing.jpg"/>
于 2012-11-06T04:53:52.933 に答える
-1

<img[^>]*>(?![^<]*</a>)

于 2012-11-06T07:14:39.113 に答える