2014-07-05 177 views
4

我有很多字符串(推特推文),我想從中刪除鏈接,當我回應他們。php:從字符串中刪除URL

我無法控制字符串,即使所有鏈接都以http開頭,它們可以以「/」或「;」結尾。不,也不遵循空間。 此外,有時鏈接和它之前的單詞之間沒有空格。這樣的字符串

一個例子:

The Third Culture: The Frontline of Global Thinkinghttp://is.gd/qFioda;via @edge 

我嘗試玩弄了preg_replace,但未能拿出適合所有異常的解決方案:

<?php echo preg_replace("/\http[^)]+\;/","",$feed->itemTitle); ?> 

任何想法我應該如何繼續?

編輯:我曾嘗試

<?php echo preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)‌​?)@', ' ', $feed->itemTitle); ?> 

,但仍然沒有成功。

編輯2:我發現這一個:

<?php echo preg_replace('^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-‌​\.\?\,\'\/\\\+&amp;%\$#_]*)?$^',' ', $feed->itemTitle); ?> 

其刪除鏈接的預期,但它也刪除整個字符串時,沒有鏈接和它前面的單詞之間的空間。

+1

相關:什麼是最好的正則表達式來檢查一個字符串是否是一個有效的URL?](http://stackoverflow.com/q/161738/1937994) – gronostaj

+0

@DavidThomas對不起:一個錯字!感謝Theftprevention! – Enora

+0

@gronostaj,感謝您的鏈接。我對Php的瞭解非常有限,我正試圖從最高優先級的anser中找到我的出路。 – Enora

回答

11

如果你想通過東西去除一切,鏈接和鏈接後,喜歡你例如,以下可幫助您:

$string = "The Third Culture: The Frontline of Global Thinkinghttp://is.gd/qFioda;via @edge"; 
$regex = "@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?).*$)@"; 
echo preg_replace($regex, ' ', $string); 

如果您想保留它們:

$string = "The Third Culture: The Frontline of Global Thinkinghttp://is.gd/qFioda;via @edge"; 
$regex = "@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@"; 
echo preg_replace($regex, ' ', $string); 
+0

非常感謝布拉克,這正是我需要的! – Enora

1

我會做這樣的事情:

$input = "The Third Culture: The Frontline of Global Thinkinghttp://is.gd/qFioda;via @edge"; 
$replace = '"(https?://.*)(?=;)"'; 

$output = preg_replace($replace, '', $input); 
print_r($output); 

它適用於多種occurances太:

$output = preg_replace($replace, '', $input."\n".$input); 
print_r($output); 
+0

謝謝@jamb的回答,但是,有時鏈接不會以「;」結尾。所以我需要找到一個更全局的正則表達式。 – Enora