模块课程(3/4)
提取 URL 和 IP
在自由文本(日志、文章、转储)中,通常需要提取 URL 和 IP 地址。让我们看看两者的稳健模式。
http/https 网址
Pattern: https?:\/\/[\w.-]+(?:\:\d+)?(?:\/[^\s]*)?https?:\/\/-- 方案,其中s可选。[\w.-]+-- 主机(域、子域,可能是localhost)。(?:\:\d+)?-- 可选端口。(?:\/[^\s]*)?-- 可选路径,直到第一个空格。
捕获 https://example.com、http://localhost:3000/api/users、
https://docs.dev/path?query=value。
IPv4
IPv4 是由点分隔的 4 个十进制八位字节:
Pattern: \b(?:\d{1,3}\.){3}\d{1,3}\b“足够好”版本:它也接受无效值,例如
999.999.999.999。对于严格版本,您需要范围交替
(25[0-5]|2[0-4]\d|[01]?\d\d?),更长。
Pattern (strict): \b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b精确与简洁
匹配 URL 或 IP 需要平衡模式容忍度。严格的 IP 验证器会验证八位字节是否超过 255。另一方面,实用的提取器通常会寻找简化的模式并将精细验证委托给专用代码。
尝试一下
查找文本中的每个 http 或 https URL。方案+主机+可选路径。
显示提示
https?对于可选的 s,[\\w.-]+ 表示域,以及一个组 (?:\\/[^\\s]*)?为可选路径。
3 次尝试后可用的解决方案
复习练习
查找每个 IPv4(用点分隔的 4 个十进制八位字节)。宽松版本,无 0-255 检查。
显示提示
使用 (?:\\d{1,3}\\.){3} 重复“八位组 + 点”3 次,然后使用 \\d{1,3} 重复最后一次。
3 次尝试后可用的解决方案
额外的挑战
Find all IPv4 addresses in the format `X.X.X.X` (composed of four 1-to-3 digit numbers separated by dots).
显示提示
Use \b to enforce boundaries, (?:\d{1,3}\.){3} to repeat the octet and dot three times, and finally \d{1,3}.
3 次尝试后可用的解决方案