的@由
[^\s()<>]+
而且匹配!標誌由
(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+
我不知道,但那些看起來並不像一個很好的正則表達式匹配的URL
嘗試它根據RFC 3986 絕對和相對url'sare相匹配的網址如下支持的。
設置不區分大小寫爲true
^
(# Scheme
[a-z][a-z0-9+\-.]*:
(# Authority & path
//
([a-z0-9\-._~%!$&'()*+,;=][email protected])? # User
([a-z0-9\-._~%]+ # Named host
|\[[a-f0-9:.]+\] # IPv6 host
|\[v[a-f0-9][a-z0-9\-._~%!$&'()*+,;=:]+\]) # IPvFuture host
(:[0-9]+)? # Port
(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/? # Path
|# Path without authority
(/?[a-z0-9\-._~%!$&'()*+,;=:@]+(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/?)?
)
|# Relative URL (no scheme or authority)
([a-z0-9\-._~%!$&'()*+,;[email protected]]+(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/? # Relative path
|(/[a-z0-9\-._~%!$&'()*+,;=:@]+)+/?) # Absolute path
)
# Query
(\?[a-z0-9\-._~%!$&'()*+,;=:@/?]*)?
# Fragment
(\#[a-z0-9\-._~%!$&'()*+,;=:@/?]*)?
$
更新1
此不匹配米!crosoft.com和@ pple.com這也可能是由於與Rublar成才。
是@標點符號嗎? – pguardiario
我理解正則表達式很好,但是這個正則表達式非常糟糕;)爲什麼不使用'URI'(或'Addressable :: URI')解析URL,然後將主機分割爲「。」? 'URI.parse(str).host.split(「。」)' – d11wtq
哇,呃......我不想讓我的名字變得模糊。我會分解任務。首先標記它。然後驗證序言。然後驗證域。 – starbolin