Regex 如何捕获可选组并在不匹配时替换?

Regex 如何捕获可选组并在不匹配时替换?,regex,replace,grouping,Regex,Replace,Grouping,在这种情况下,用户可能输入带有或不带有http://的URL。如果它在那里,我想拥有它,否则请添加http://我自己。我有以下正则表达式模式: 正则表达式:\[url\](?:https?\:\/\/)(.*?\[\/url\]替换: 这就是为什么 [url]http://blog.sanspace.in[/url] [url]https://blog.sanspace.in[/url] [url]blog.sanspace.in[/url] [url]blog.sanspace.in/scr

在这种情况下,用户可能输入带有或不带有
http://
的URL。如果它在那里,我想拥有它,否则请添加
http://
我自己。我有以下正则表达式模式:

正则表达式:
\[url\](?:https?\:\/\/)(.*?\[\/url\]
替换:

这就是为什么

[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>
请注意最后3个URL。这里我必须添加
http
,但前提是我知道没有用户添加
http
。我不知道如何实现我的目标

我在这里测试这个问题

试试下面的正则表达式:

匹配:
\[url\](?:http?\:\/\/)?(*?)\[\/url\]

替换:


由于您愿意在原始字符串中不存在的情况下插入
http://
,因此这里的想法是即使存在也无法捕获它。相反,只捕获可选的
s
,指示将安全http转换为
$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>
<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>