网址匹配正则表达式(python实现)
正则表达式部分如下:
python
pattern = re.compile(
r'^(?:http|ftp)s?://' # http:// or https:// or ftp:// or ftps://
r'(?:\S+(?::\S*)?@)?' # 可选的 用户:密码@ 部分
r'(?:' # 开始匹配域名
r'[A-Z0-9.-]+\.[A-Z]{2,6}' # 规范的域名,如 example.com
r'|' # 或者
r'localhost' # 本地 localhost
r')' # 域名结束
r'(?::\d{2,5})?' # 可选的端口号,如 :8080
r'(?:/?|[/?]\S+)$', # 可选的路径和查询参数,如 /path 或 /path?query=1
re.IGNORECASE # 不区分大小写
)
分段解释:
-
r'^(?:http|ftp)s?://'
:该部分匹配 URL 的协议部分,支持http://
、https://
、ftp://
、ftps://
。其中,s?
表示s
是可选的,这使得该部分可以匹配带有或不带有s
的 URL。 -
r'(?:\S+(?::\S*)?@)?'
:这个部分用于匹配可选的用户信息,即用户:密码@
,这是用于带有身份验证的 URL 的常见格式。?
表示这一部分是可选的,不一定会出现在 URL 中。 -
r'(?:[A-Z0-9.-]+\.[A-Z]{2,6}|localhost)'
:该部分匹配域名:[A-Z0-9.-]+\.[A-Z]{2,6}
:匹配像example.com
这样的域名,.com
的后缀部分可以是 2 到 6 个字母(如.com
、.org
、.net
等)。localhost
:专门处理localhost
的情况,这是在本地开发时常用的 URL。
-
r'(?::\d{2,5})?'
:这个部分用于匹配可选的端口号(例如:8080
),其中端口号的位数可以是 2 到 5 位。该部分也是可选的。 -
r'(?:/?|[/?]\S+)$'
:这个部分匹配 URL 的路径或查询参数部分,可能为空,或者可以是类似/path
或/path?query=1
的格式。 -
re.IGNORECASE
:这是正则表达式的一个标志,它指定正则表达式在匹配时不区分大小写。
这个正则表达式涵盖了协议、用户信息、域名、端口号、路径等各个 URL 的组成部分,能够处理大多数常见的 URL 格式。