0

次のようなリンクがあります。

<a href="http://illegallink.com"><img src="something.jpg" /><a href="http://legallink.com">legal</a></a>

「legallink.com」を含まないすべてのリンクを削除したい。でも内容はそのまま。したがって、上記の入力は次のように出力されます。

<img src="something.jpg" /><a href="http://legallink.com">legal</a>

リンクを介して再帰的に機能するはずです。

すべてのリンクを削除するこの正規表現を見つけました:/<\\/?a(\\s+.*?>|>)/が、href が legallink.com であるリンクを保持したい。

これは正規表現で行うことができますか? または、DOM パーサーを使用する必要がありますか?

4

1 に答える 1

1
error_reporting(~0); display_errors(1);

$code = '<a href="http://illegallink.com"><img src="something.jpg" /><a href="http://legallink.com">legal</a></a>';

$document = new DOMDocument(); 
$document->loadHTML($code); 
$parser = new DOMXPath($document);  

foreach($parser->query("//a") as $node)  
{ 
  if (!preg_match("/^http:\/\/legallink.com/i", $node->getAttribute("href")))
  {
    $node->parentNode->replaceChild($node->nodeValue, $node);
  }
}
echo $document->saveXML();
于 2012-04-18T21:29:51.357 に答える