我已经使用了Liberal URL Regex from Daring Fireball,将其与some of Alan Storm improvements合并,并且修改了一些错误,例如支持括号内的IDN字符。这就是我所说的:
/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/
但是我遇到了一个我无法解决的错误:
'www.dsd(sd)sdsd.com' // can also be the valid 'www.dsd.com/whatever(whatever)'
以上网址被识别为www.dsd(sd)sdsd.com'
(或www.dsd.com/whatever(whatever)'
),而不是www.dsd(sd)sdsd.com
(或www.dsd.com/whatever(whatever)
)。这似乎只在URL有括号时发生,因为以下URL:
'www.sampleurl.com'
正确识别为www.sampleurl.com
。
我认为正则表达式的[^[:punct:]\s]|\/
部分在URL有括号时没有被执行,我已经尝试了一段时间但我似乎无法找到解决方案。任何人都可以帮助我吗?
对于商品,我设置了Rubular permalink with the regex and some test data(最后一个网址失败)。
我认为Gruber的正则表达式有点匆忙,例如它与URL不匹配:
http://en.wikipedia.org/wiki/Something_(Special)_For_You
我看到Gruber和Alan错过了这个非常简单的拼写错误,我印象更深刻:
\([\w\d]+\)
\(\w+\)
不够吗? :S
答案 0 :(得分:4)
似乎像Gruber has revised his regular expression:
\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s]))
答案 1 :(得分:1)
www.dsd(sd)sdsd.com不是有效的域名。
如果您有'www.dsd.com/whatever(whatever)'
,则会被正确识别。 (或至少在我的测试中)
答案 2 :(得分:1)
/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/
www. | | |
dsd | |
(sd) |
sdsd.com'
这就是我认为这种情况发生故障...... (sd)
上面的正则表达式的开头是一个逃脱的开放式paren,然后是一个匹配sd
的凝视的char类,然后是一个逃脱的关闭paren,以及接下来是[^\s()<>]*
与sdsd.com'
匹配。