我从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
我正在尝试整合John Gruber的改进的自由,准确的正则表达式模式,以便将URL匹配到我的Javascripts中,但是WebKit的检查器(在Google Chrome 5.0.375.125 for Mac中)给出了"无效组"正则表达式语法错误.
Gruber的原始正则表如下:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
Run Code Online (Sandbox Code Playgroud)
我的JavaScript与regexp的行如下(带正斜杠反斜杠转义):
tweet_text = tweet_text.replace(/(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi, '<a href="$1">$1</a>');
Run Code Online (Sandbox Code Playgroud)
Google Chrome(V8?)错误如下:
Uncaught SyntaxError: Invalid regular expression: /(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/: Invalid group
Run Code Online (Sandbox Code Playgroud)
Safari错误如下:
SyntaxError: Invalid regular expression: unrecognized character after (?
Run Code Online (Sandbox Code Playgroud)
他声称它应该适用于现代JavaScript regexp解释器,我假设它是WebKit和V8.JavaScript的regexp语法是否不支持(?:(该死的谷歌没有索引标点符号!)分组语法?我是否只是想错过一些东西?
如何重写这种新方法来识别在Python中工作的地址?
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
如何在php中使用preg_match处理本文中提到的正则表达式?
<?php
preg_match("\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))/i", $text, $matches);
print_r($matches);
?>
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我收到以下错误:
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash...
Run Code Online (Sandbox Code Playgroud)