2017-09-18 110 views
-3

例如PHP正則表達式刪除標記與特定的詞

<?php 
$html = "<p>Lorem ipsum lorem ipsum lorem ipsum</p> 
     <p>Lorem ipsum lorem ipsum lorem ipsum</p> 
     <p>Read : SOME ARTICLE</p> 
     <p>Lorem ipsum lorem ipsum lorem ipsum"; 
?> 

我想刪除<p>Read : SOME ARTICLE</p>,也許使用PHP的正則表達式。如何開始<p>Read : **** </p>已不見了。

感謝

+3

您已經嘗試了什麼?看看DOMDocument而不是Regex。 「 –

+0

」如何從

開始閱讀:****

已不存在。「我認爲這是你問的實際問題。但我真的不明白。你能改說嗎?提供更多的樣本輸入和期望的輸出?也許一路走到一個[mcve]。 – Yunnosch

+0

我同意一些文件,但你堅持使用正則表達式:https://regex101.com/r/0VB1hi/1 – Andreas

回答

1

嘗試使用preg_relace

$html = "<p>Lorem ipsum lorem ipsum lorem ipsum</p> 
     <p>Lorem ipsum lorem ipsum lorem ipsum</p> 
     <p>Read : SOME ARTICLE</p> 
     <p>Lorem ipsum lorem ipsum lorem ipsum"; 

$html = preg_replace("/(<p>Read :.*?<\/p>)/", "", $html); 
echo $html; 

DEMO

+1

不應該''*'懶惰? '。*?'? – Andreas

2

您應該使用DOMDocument而不是Regex

(可選)您可以使用LIBXML_HTML_NODEFDTDLIBXML_HTML_NOIMPLIED來避免html標籤。

Try this code snippet here

<?php 
ini_set('display_errors', 1); 
$html = "<p>Lorem ipsum lorem ipsum lorem ipsum</p> 
     <p>Lorem ipsum lorem ipsum lorem ipsum</p> 
     <p>Read : SOME ARTICLE</p> 
     <p>Lorem ipsum lorem ipsum lorem ipsum"; 

$domDocument = new DOMDocument(); 
$domDocument->loadHTML($html,LIBXML_HTML_NODEFDTD|LIBXML_HTML_NOIMPLIED); 

$domXPath = new DOMXPath($domDocument); 
$results = $domXPath->query("//p[contains(.,'Read :')]");//querying p node which contains `Read: ` 

$nodeToremove=$results->item(0); 
$nodeToremove->parentNode->removeChild($nodeToremove);//Removing node 
echo $domDocument->saveHTML(); 
+2

DOM是要走的路。 – Toto