我找到了以下模式来验证网址here:
/\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;
作者对此正则表达式的解释是:
(?xi)
\b
( # Capture 1: entire matched URL
(?:
https?:// # http or https protocol
| # or
www\d{0,3}[.] # "www.", "www1.", "www2." … "www999."
| # or
[a-z0-9.\-]+[.][a-z]{2,4}/ # looks like domain name followed by a slash
)
(?: # One or more:
[^\s()<>]+ # Run of non-space, non-()<>
| # or
\(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
)+
(?: # End with:
\(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
| # or
[^\s`!()\[\]{};:'".,<>?«»“”‘’] # not a space or one of these punct chars
)
)
问题是,如果我输入www.ab
这个正则表达式并且说这是一个有效的网址,我想要的是这个网址必须有2个最后部分:“ foobar ” + 。 + (至少2个字符),那么我如何修改此Regex以匹配我需要的内容?
答案 0 :(得分:3)
您最初表示您希望正则表达式与三部分网址匹配:www,域名和最少2个字符的TLD。那将是:
(https?://)?[^.]+\.[^.]+\....*
我在这里使用点来处理域和TLD中的数字和非拉丁字符的情况。
如果您想支持一个或多个子域,我们可以使该正则表达式更通用。考虑:
(https?://)?([^.]+\.)+...*
这仍然与www.ab匹配 - 根据“domain”+“”的规范,这是一个“有效”的URL。 +“tld”(最少两个字符)。它也符合www.45,但您没有规定使TLD有效的原因。
所以最终考虑关注一些sage advice:
哪个...你应该使用正则表达式?这真的取决于 在你想要做什么。在许多情况下,答案可能是 根本不使用任何正则表达式。只需尝试解析URL。 如果它返回有效内容,请接受它。如果你得到404或其他 错误,拒绝它。最终,这是唯一真正的考验,看看是否 网址有效
答案 1 :(得分:0)
/\bwww\.\w+\.\w{2,}/
这将匹配www.any_alfa_numeric_combo.two_or_more_alfa_nemeric