2013-01-10 121 views
0

處理用戶輸入,以超鏈接時,我使用正則表達式和PHP的preg_replace函數使用這段代碼來的生活忽略{{ }}包裹的所有鏈接,因此,例如,該輸入應該由正則表達式進行處理:落後消極

http://www.example.com/

該輸入應該被忽略:

{{http://www.example.com/}}

如何更改我的正則表達式以按預期工作?

回答

3

帶有負回顧後((?<!...))和負前瞻((?!...))環繞你的正則表達式:

'/(?<!\{\{)(((f|ht)tp:\/\/)[-a-zа-я()[email protected]:%_+.~#?&;\/=]+)(?!\}\})/i' 

或者,只是去通過字的文詞,並嘗試看看一個字是一個有效的使用URL解析庫的URL(URL中不能有空格);並只在這種情況下更換。

+1

邊緣情況如何? '{{http:// link'和'http:// link}}' –

+0

那些會匹配,是的,現在會有什麼類型的... – fge

+0

那麼完整的代碼行是什麼?我以''!''開頭嗎? –