2012-11-29 37 views
2

嘗試在用戶輸入[link](http://www.example.com)並用「http:// www」獲取名爲「link」的超鏈接時編寫腳本。 example.com「作爲href。這是我的代碼:PHP:正則表達式中的剩餘文本

if(preg_match("/\[[a-zA-Z0-9]*\]([a-zA-Z0-9]*)/", $input)) 
{ 
    $input = preg_replace("/\[([a-zA-Z0-0-9]*)\](([a-zA-Z0-9]*))/", "<a href='$2'>$1</a>", $input); 
} 

我一直找回的是[link](http://www.example.com)(http://www.example.com)。任何想法我做錯了什麼?

+0

如果你正在處理降價,還有已經有工具可以爲你做到這一點,比如http://michelf.ca/projects/php-markdown/ –

+0

謝謝,但我實際上在滾動我自己的代碼來學習正則表達式。 – symlink

回答

1

你忘了轉義字面括號(因此(([a-zA-Z0-9]*))部分簡單地匹配空字符串)。

此外,你需要允許至少斜槓,冒號和點,如果你想匹配的鏈接:

$input = preg_replace("%\[([A-Z0-9]*)\]\(([A-Z0-9/:.]*)\)%i", "<a href='$2'>$1</a>", $input); 

或可能

$input = preg_replace("%\[([A-Z0-9]*)\]\((https?://[A-Z0-9/.]*)\)%i", "<a href='$2'>$1</a>", $input); 
+0

啊,我明白了,謝謝。 – symlink