2016-09-28 88 views
0

頁面具有鏈接到其他頁面的超鏈接以及錨定標記以跳轉到頁面內的位置。我想保留錨標籤並刪除所有其他超鏈接。保留錨定標記並刪除其他超鏈接

錨標記示例:

<a class="footnote" href="#fnx" id="fnx_ref">x</a> 

跳到

<a class="footnote" href="#fnx_ref">x</a> 

其中x1,2,3,4 ... n

頁面內的所有其他超鏈接(帶或不帶類屬性)都需要刪除。如何才能做到這一點?我應該使用php正則表達式

+0

使用'DOMDocument'&'DOMXPath'比正則表達式更容易 – RamRaider

+0

試圖稍微打開該解決方案 –

回答

1

與其使用RegEx在html中查找合適的標籤,使用DOMDocument & DOMXPath如下所示相當容易。

最後一行只是將最終編輯後的html回顯到textarea中,但您可以輕鬆將它保存到文件中。

/* 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>"; 
}