跳转到主要内容
模块 8 · 第 3 课(共 4)课程中的31/32~12 min
模块课程(3/4)

提取 URL 和 IP

在自由文本(日志、文章、转储)中,通常需要提取 URL 和 IP 地址。让我们看看两者的稳健模式。

http/https 网址

Code
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 个十进制八位字节:

Code
Pattern: \b(?:\d{1,3}\.){3}\d{1,3}\b

“足够好”版本:它也接受无效值,例如 999.999.999.999。对于严格版本,您需要范围交替 (25[0-5]|2[0-4]\d|[01]?\d\d?),更长。

Code
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。另一方面,实用的提取器通常会寻找简化的模式并将精细验证委托给专用代码。

尝试一下

锻炼#regex.m8.l3.e1
尝试:0加载中...

查找文本中的每个 http 或 https URL。方案+主机+可选路径。

正在加载编辑器...
显示提示

https?对于可选的 s,[\\w.-]+ 表示域,以及一个组 (?:\\/[^\\s]*)?为可选路径。

3 次尝试后可用的解决方案

复习练习

锻炼#regex.m8.l3.e2
尝试:0加载中...

查找每个 IPv4(用点分隔的 4 个十进制八位字节)。宽松版本,无 0-255 检查。

正在加载编辑器...
显示提示

使用 (?:\\d{1,3}\\.){3} 重复“八位组 + 点”3 次,然后使用 \\d{1,3} 重复最后一次。

3 次尝试后可用的解决方案

额外的挑战

锻炼#regex.m8.l3.e3
尝试:0加载中...

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 次尝试后可用的解决方案