はむしろ、HTML内の適切なタグを見つけるために、RegEx
を使用するよりも、以下のようにDOMDocument
& DOMXPath
を使用するのはかなり簡単です。
最後の行は、最終的に編集されたhtmlをテキストエリアにエコーしますが、ファイルに簡単に保存できます。
/* XPath expression to find all anchors that do not contain "#" */
$query='//a[ not (contains(@href, "#")) ]';
/* Some url */
$url='http://stackoverflow.com/questions/39737604/keeping-anchor-tags-and-removing-other-hyperlinks-php-regex';
/* get the data */
$html=file_get_contents($url);
/* construct DOMDocument & DOMXPath objects */
$dom=new DOMDocument;
$dom->loadHTML($html);
$xp=new DOMXPath($dom);
/* Run the query */
$col=$xp->query($query);
/* Process all found nodes */
if(!empty($col)){
/*
As you are removing nodes from the DOM you should
iterate backwards through the collection.
*/
for ($i = $col->length; --$i >= 0;) {
$a = $col->item($i);
$a->parentNode->removeChild($a);
}
/* do something with processed html */
echo "<textarea cols=150 rows=100>",$dom->saveHTML(),"</textarea>";
}
正規表現 – RamRaider
より 'DOMDocument'&' DOMXPath'を使用することが容易になるだろうが、ほとんどのソリューションを開こうとしました –