2016-02-11 62 views
-1

我有什麼正則表達式來移除YouTube鏈接

$string = "bla bla bla bla bla <a href='http://youtube.com/watch?=XXXXX'>my video</a> ble ble ble ble <a href='http://google.com'>google</a>"; 

我想

$string = "bla bla bla bla bla ble ble ble ble <a href='http://google.com'>google</a>"; 

我只想刪除YouTube的鏈接

+1

我看到兩件事情是錯誤的。首先,很容易使用URL縮寫來解決這種問題。其次,假設這些內容來自用戶,並且您允許使用標籤,則可以顯示任何類型的HTML。這允許HTML注入和XSS攻擊 –

回答

2

這種模式適用於您發佈的例子是什麼,讓我知道你是否需要它更具體。

$re = "/^(.*?)<a .*youtube.*>.*<\\/a>(.*?)$/Ui"; 
$str = "bla bla bla bla bla <a href='http://youtube.com/watch?=XXXXX'>my video</a> ble ble ble ble <a href='http://google.com'>google</a>"; 

preg_match($re, $str, $matches); 
$string = isset($matches[2]) ? $matches[1] . $matches[2] : ""; // Return a blank string for no match 
+2

這個例子只會刪除一個youtube鏈接,效率會低於使用preg_replace() –

+0

我同意你在這裏,preg_replace是更好的解決方案。我想我有機會玩正則表達式高爾夫球,並錯過了原始點:S – Hiphop03199

3

這應該做的伎倆,刪除所有在他們的單詞youtube somwhere的A標籤。

$string = "bla bla bla bla bla <a href='http://youtube.com/watch?=XXXXX'>my video</a> ble ble ble ble <a href='http://google.com'>google</a>"; 
echo preg_replace("#(<a.*youtube.*a>)#U","",$string); 

你可以擴展這個進一步的檢查youtube.com/或財產以後更精確,如果您需要。

+1

很好的正則表達式! – Cuchu

1

嘗試此解決方案:

<?php 
$dom = new DOMDocument; 
$string = "bla bla bla bla bla <a href='http://youtube.com/watch?=XXXXX'>my video</a> ble ble ble ble <a href='http://google.com'>google</a>"; 
$dom->loadHTML($string); 

print_r("<pre>"); 
print_r($string); 
print_r("</pre>"); 

print_r("<br />"); 

$elements = $dom->getElementsByTagName('a'); 
for ($i = $elements->length; --$i >= 0;) { 
    $href = $elements->item($i); 
    if(strpos($href->getAttribute('href'), "youtube")) { 
     $href->parentNode->removeChild($href);  
    } 
} 
$html = $dom->saveHTML(); 

print_r("<pre>"); 
print_r($html); 
print_r("</pre>"); 
die; 

輸出:

唧唧歪歪BLA BLA我的視頻BLE BLE BLE BLE谷歌

BLA BLA唧唧歪歪BLE BLE BLE BLE谷歌