Gruber URL Regex调整以捕获“domain.com”

时间:2011-11-27 09:42:50

标签: regex url

我找到了用户in this post匹配GianPac的网址的John Gruber正则表达式的更新版本,该版本声明它已经过调整以识别没有协议的网址或www部分:

\ B((:[AZ] [\ W - ] +:(:(Ⅰ')?/ {1,3} | [A-Z0-9%])| WWW \ d {0,3 } | [A-Z0-9 .-] + [AZ] {2,4} /)[] []?(?:[^ \ S()&LT;&GT;] + |(([^ \ S()&LT;&GT;] + |(([^ \ S()&LT;&GT;] +)))))(?:(([^ \ S()&LT;&GT;] + |(([ ^ \ S()&LT;&GT;] +))))| [^ \ s`()[!] {};:'\”,&LT;&GT;«»。?‘’ '']))< / p>

虽然这在大多数情况下有效,但我发现它与“google.com”不匹配。它匹配“google.comm”“google.co.uk”,所以这必须是一个小小的疏忽。

麻烦的是,我真的很讨厌正则表达式。这是我生命中的祸根。我只是想尝试再调整一次以允许“google.com” - 任何人都可以给我一个指针吗?我认为这与代码的这一部分有关:

+[.][a-z]{2,4}/?)

1 个答案:

答案 0 :(得分:1)

将其从{2,4}更改为{1,4},它将匹配。

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.-]+[.][a-z]{1,4}/?)(?:[^\s()<>]+|(([^\s()<>]+|(([^\s()<>]+)))))(?:(([^\s()<>]+|(([^\s()<>]+))))|[^\s`!()[]{};:'\".,<>?«»“”‘’]))

但它仍然完全不可理解,而且我不确定我是否相信一个与google.com不匹配的正则表达式网址检查器!大多数语言都内置了解析URL的内容,如果可能的话,这是一个更好的选择。