正确匹配URL的正则表达式

本文分享了从StackOverflow找到的最佳URL匹配正则表达式,解决了包括IP地址、汉字及带参数URL的匹配问题,并对比了其他版本的不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址为: 正确匹配URL的正则表达式

网上流传着多种匹配URL正则表达式版本,但我经过试验,最好用的还是从stackoverflow上查到的:

(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]

IP地址、前后有汉字、带参数的,都是OK的。

image

 

另外几个有问题的版本:

摘自微软MSDN:

(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?

带参数的匹配有问题。

image

百度知道中有人回答的

http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

有严重的汉字问题。

image

 

另外,如果只是想匹配URL中的域名部分,则可以用这个:

((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:ww‌​w.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?‌​(?:[\w]*))?)

image

 

 

看不懂正则表达式?用regulex试试,可以把正则表达式可视化!

参考:精通正则表达式的 12 个有用资源


转载请注明本文地址: 正确匹配URL的正则表达式
### 构建正确URL正则表达式 为了构建一个有效的正则表达式匹配URL,可以从基本结构入手并逐步扩展其功能。以下是详细的说明: #### 基本URL结构分析 URL通常由以下几个部分组成: - 协议 (`http`, `https`) - 主机名或IP地址 - 可选端口号 - 路径 - 查询参数 - 片段标识符 基于此,可以设计如下正则表达式[^1]。 #### 完整的正则表达式示例 以下是一个较为通用的正则表达式,用于匹配大部分常见格式的URL[^2]: ```regex ^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[0-9]+)?)(\/[\w./?%&=-]*)*$ ``` 解释各部分含义: - `^` 和 `$`: 表示整个字符串必须完全匹配。 - `(https?|ftp)`: 匹配协议部分,支持 `http`, `https`, 或者 `ftp`。 - `\:\/\/`: 匹配冒号斜杠组合 `://`。 - `([a-zA-Z0-9.-]+(:[0-9]+)?)`: 匹配主机名/IP地址及其可选端口。 - `(/[\w./?%&=-]*)*`: 匹配路径、查询参数以及其他附加组件。 如果需要更复杂的场景(如国际化域名),还可以进一步优化该正则表达式[^3]。 #### Python实现代码 在Python中可以通过内置模块`re`轻松运用上述正则表达式进行匹配操作。例如: ```python import re url_pattern = r'^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[0-9]+)?)(\/[\w./?%&=-]*)*$' test_urls = [ 'http://example.com', 'https://www.example.org/path/to/resource?query=param#fragment', 'ftp://files.example.net/file.txt' ] for url in test_urls: match_result = re.match(url_pattern, url) if match_result: print(f"'{url}' 是合法的 URL") else: print(f"'{url}' 不是合法的 URL") ``` 以上脚本会逐一验证给定列表中的每一项是否符合定义的标准形式[^4]。 #### 注意事项 尽管这一版本已经覆盖了许多情况,但在某些极端情况下仍可能存在遗漏或者误判现象。因此,在实际项目开发过程中应当依据特定业务逻辑微调相应规则。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值