2010-09-22 67 views
2

正則表達式我有這個字符串如何爲類似的字符串

[url=test.php]test[/url] 

[url=http://test.php]text[/url] 

我想正則表達式得到這個

[url=http://test.php]text[/url] 

例如:

前:

str = "[url=test.php]text[/url]" 
str.gsub(/\[url=(.*?)\](.*?)\[\/url\]/,'[url=http://\1]\2[/url]') 
=> "[url=http://test.php]text[/url]" 

問題:

str = "[url=http://test.php]text[/url]" 
str.gsub(/\[url=(.*?)\](.*?)\[\/url\]/,'[url=http://\1]\2[/url]') 
=> "[url=http://http://test.php]text[/url]" 

所以..兩個 「HTTP://」

任何想法嗎?

感謝

回答

0

感謝澄清你的問題。

如果鏈接的網址是而不是開頭http您需要一個匹配[url] BBCode標記的正則表達式。

\[url=\s*(?!http)([^\]]+)\](.*?)\[/url\] 

應該工作:

str.gsub(/\[url=\s*(?!http)([^\]]+)\](.*?)\[\/url\]/,'[url=http://\1]\2[/url]') 

說明:

\[url=\s* # match [url= literally, plus optional space 
(?!http) # assert that it's not possible to match http here 
([^\]]+) # match 1 or more characters except ], capture in \1 
\]   # match ] 
(.*?)  # match link text, capture in \2 
\[/url\] # match [/url] 
+0

我已經更新我的問題 – squarezw 2010-09-22 13:47:02