2013-11-01 33 views
0

我有這種情況,用戶可能會輸入或不輸入http(s)://的URL。我想要它,如果它在那裏,否則自己添加http://。我有以下的正則表達式模式:如何捕獲可選組並在不匹配的情況下進行替換?

正則表達式:\[url\](?:https?\:\/\/)?(.*?)\[\/url\]更換:<a href="$1">$1</a>

這使得這個

[url]http://blog.sanspace.in[/url] 
[url]https://blog.sanspace.in[/url] 
[url]blog.sanspace.in[/url] 
[url]blog.sanspace.in/scraperwiki[/url] 
[url]www.sanspace.in[/url] 

這個

<a href="http://blog.sanspace.in">http://blog.sanspace.in</a> 
<a href="http://blog.sanspace.in">http://blog.sanspace.in</a> 
<a href="http://blog.sanspace.in">http://blog.sanspace.in</a> 
<a href="http://blog.sanspace.in/scraperwiki">http://blog.sanspace.in/scraperwiki</a> 
<a href="http://www.sanspace.in">http://www.sanspace.in</a> 

現在,我想是使它喜歡這個。 (使用HTTP(S)如果有的話。否則,HTTP)

<a href="http://blog.sanspace.in">http://blog.sanspace.in</a> 
<a href="https://blog.sanspace.in">https://blog.sanspace.in</a> 
<a href="http://blog.sanspace.in">http://blog.sanspace.in</a> 
<a href="http://blog.sanspace.in/scraperwiki">http://blog.sanspace.in/scraperwiki</a> 
<a href="http://www.sanspace.in">http://www.sanspace.in</a> 

我試圖加入http(s)爲一組。

正則表達式:\[url\](https?\:\/\/)?(.*?)\[\/url\]更換:<a href="$1$2">$1$2</a>

UT,在這種情況下,替換順序$1$2是不同的。如果用戶添加了http,則其變爲$1,否則URL變爲$1

<a href="http://blog.sanspace.in">http://blog.sanspace.in</a> 
<a href="https://blog.sanspace.in">https://blog.sanspace.in</a> 
<a href="blog.sanspace.in">blog.sanspace.in</a> 
<a href="blog.sanspace.in/scraperwiki">blog.sanspace.in/scraperwiki</a> 
<a href="www.sanspace.in">www.sanspace.in</a> 

請注意最後3個網址。在這裏,我必須添加http,但前提是我知道沒有用戶添加http。我不知道如何實現我的目標。

我在這裏測試這個問題。 http://regexr.com?3711a

+1

該正則表達式的哪種語言/工具? – anubhava

回答

2

嘗試以下的正則表達式:

比賽:\[url\](?:http(s)?\:\/\/)?(.*?)\[\/url\]

替換:<a href="http$1://$2">http$1://$2</a>

regexr demo

既然你願意插入http://如果它不存在於原始的字符串,這裏的想法即使存在,也不會捕獲它。而是僅捕獲指示安全http的可選s$1

+0

工程很好。好主意。爲什麼我不這樣想? :) – San

相關問題