简洁的格式
(?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`!()\[\]{};:'".,<>?«»“”‘’]))
复制代码
解释它是怎么工作的
(?xi)
\b
( # 获取 1: 匹配整个URL
#######################################################################################
(?:
[a-z][\w-]+: # URL协议和冒号
(?:
/{1,3} # 1-3 斜杠
| # 或者
[a-z0-9%] # 单个字母 或者 数字 或者 百分号
# (不匹配 "URI::Escape")
) # https?://
| # 或者
www\d{0,3}[.] # "www.", "www1.", "www2." … "www999."
| # 或者
[a-z0-9.\-]+[.][a-z]{2,4}/ # 域名后面跟一个斜杠
)
#######################################################################################
(?: # 一个或多个:
[^\s()<>]+ # Run of non-space, non-()<>
| # 或者
\(([^\s()<>]+|(\([^\s()<>]+\)))*\) # 最多2个级别括号
)+
#######################################################################################
(?: # 结束:
\(([^\s()<>]+|(\([^\s()<>]+\)))*\) # 最多2个级别括号
| # 或者
[^\s`!()\[\]{};:'".,<>?«»“”‘’] # 不是空白 或者 不是标点符号字符
)
#######################################################################################
)
复制代码