网址匹配正则表达式(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 格式。