帮助破解格鲁伯的自由URL正则表达式

Ali*_*xel 10 php regex url gruber

从Daring Fireball中获取了Liberal URL Regex,将其与Alan Storm的一些改进合并,并且修复了一些错误,例如支持括号内的IDN字符.这就是我的意思:

/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/
Run Code Online (Sandbox Code Playgroud)

但是我遇到了一个我无法解决的错误:

'www.dsd(sd)sdsd.com' // can also be the valid 'www.dsd.com/whatever(whatever)'
Run Code Online (Sandbox Code Playgroud)

上述URL被识别为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'
Run Code Online (Sandbox Code Playgroud)

正确被认可为www.sampleurl.com.

我认为当URL有括号时,正则表达式[^[:punct:]\s]|\/部分没有被执行,我已经尝试了一段时间,但我似乎无法找到解决方案.谁能帮我?

对于商品,我已经使用正则表达式和一些测试数据(最后一个URL失败)设置了Rubular永久链接.


我认为Gruber的正则表达式有点匆忙,例如它与URL不匹配:

http://en.wikipedia.org/wiki/Something_(Special)_For_You
Run Code Online (Sandbox Code Playgroud)

看到GruberAlan都错过了这个非常简单的拼写错误,我印象更深刻:

\([\w\d]+\)
Run Code Online (Sandbox Code Playgroud)

\(\w+\)不够吗?:S

Ali*_*xel 4

格鲁伯似乎修改了他的正则表达式

\n\n
\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.])(?:[^\\s()<>]+|\\([^\\s()<>]+\\))+(?:\\([^\\s()<>]+\\)|[^`!()\\[\\]{};:\'".,<>?\xc2\xab\xc2\xbb\xe2\x80\x9c\xe2\x80\x9d\xe2\x80\x98\xe2\x80\x99\\s]))\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在工作得很好

\n