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)
看到Gruber和Alan都错过了这个非常简单的拼写错误,我印象更深刻:
\([\w\d]+\)
Run Code Online (Sandbox Code Playgroud)
还\(\w+\)不够吗?:S
格鲁伯似乎修改了他的正则表达式:
\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]))\nRun Code Online (Sandbox Code Playgroud)\n\n\n