2013-09-24 51 views
0

我一直在努力提出正則表達式語法來處理從某種形式使某些字符串模式成可點擊的鏈接。回車導致我的正則表達式模式出現問題,需要一些幫助來理解如何忽略它們。舉個例子,如果我把這個文本輸入到我的文本區域中,正則表達式語法來處理回車在PHP

http://www.google.com 
http://www.google.com 
www.google.com 
google.com 

這是我的正則表達式模式看到它之前的輸出;

http://www.google.com\r\nhttp://www.google.com\r\nwww.google.com\r\ngoogle.com 

我需要能夠從超鏈接中刪除\ r \ n字符。我的正則表達式是這樣的;

function make_links_clickable($message) 
    { 
    return preg_replace('!(((.*www\.)?(f|ht)tp(s)?://)?[-a-zA-Zа-яА-Я()[email protected]:%_+.~#?&;//=]+)!i', '<a href="http://$0" target="_blank">$0</a>', $message); 
    } 

誰能告訴我如何刪除正則表達式中的任何前導\ r \ n字符?

+0

爲什麼你需要將它們刪除?你的正則表達式不匹配它們。 – Barmar

回答

0

一個簡單的方法是拆分新行,然後在每個元素上運行正則表達式。注意:

function make_links_clickable($message) 
{ 
     $result = array(); 
     foreach(explode(PHP_EOL,$message) as $m) 
     { 
      $result[] = preg_replace('!(((.*www\.)?(f|ht)tp(s)?://)?[-a-zA-Zа-яА-Я()[email protected]:%_+.~#?&;//=]+)!i', '<a href="http://$0" target="_blank">$0</a>', $m); 
     } 
     return join(PHP_EOL,$result); 
} 

另外,您可以使用preg_filter

+0

不應該在'「\ r \ n」'上分割嗎? – Barmar

+0

這是爲什麼這是必要的?正則表達式在換行符之間不匹配。 – Barmar

+0

@Byron - 當我在你的解決方案中嘗試語法時,它會踢出一個錯誤(在foreach中抱怨'in')。有任何想法嗎? – Kimomaru