0

我如何从描述中清除所有不在标签内的 url。并且还保留所有img url?

例如,结果应该是这样的:

之前的描述:

this is my description www.url.com and other stuff. 
i have a picture <img src="www.url.com"> and other desc stuf..
sample text goes here and here..

之后的描述应该是:

this is my description and other stuff. 
i have a picture <img src="www.url.com"> and other desc stuf..
sample text goes here and here..

非常感谢。

4

3 回答 3

1
$string = 'this is my description www.url.com and url.com and http://www.url.com other stuff. 
i have a picture <img src="www.url.com"> and other desc stuf..
sample text goes here and here..';

echo preg_replace('/[^\"](http(s?):\/\/)?(www)?\.?([A-Za-z0-9\-]){2,25}\.(com|net|org)[^\"]/', ' ', $string);

输出:

this is my description and and other stuff. 
i have a picture <img src="www.url.com"> and other desc stuf..
sample text goes here and here..

不确定这是否是您要查找的内容。

它显然不匹配所有可能的 URL,但它是您可以开始的地方。

于 2012-09-05T11:57:18.280 回答
0

好吧,这非常困难,您最好尝试其他选择。一个 URL 有很多不同的形状和形式,要为所有类型的 URL 创建一个 100% 可靠的正则表达式是非常困难的。

首先,如果您需要匹配 100% 的 url,或者 x% 也足够好并且误报是可以的,那么您必须做出选择。

然后你可以用一个点匹配所有单词,通过 parse_url 运行它,如果这给你一个好的结果,把它从文本中删除。

于 2012-09-05T11:51:44.503 回答
0
$words = explode(' ', $description);
foreach ($words as $k => $v)
    if (filter_var($v, FILTER_VALIDATE_URL) || preg_match("/([a-z0-9\.]+)\.([a-z0-9][a-z0-9]+)/i", $v))
        unset($words[$k]);
$description = implode(' ', $words);

此解决方案删除格式正确的 URL 和域,但它是一个近似解决方案,因为我不知道(恕我直言)一个词是whereis.it 之类的域还是will.i.am之类的简单词。

于 2012-09-05T11:48:50.137 回答