正则表达式删除YouTube超链接


Regex to remove youtube hyperlinks

我有什么

$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超链接

这应该可以解决问题,删除所有带有 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/或更精确的内容。

此模式适用于您发布的示例,如果您需要更具体,请告诉我。

$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

请尝试以下解决方案:

<?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;

输出:

呸��

呸��