不能直接用\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3},因它只限制位数(0–999),不校验0–255数值范围,且接受前导零;正确方案须分段精确匹配:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d),并加单词边界\b确保独立性。

为什么不能直接用 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
这个正则看着简洁,但会匹配 999.999.999.999 或 192.168.1000.1 这类非法 IP,因为 \d{1,3} 只限制位数,不限制数值范围。日志里一旦混入这类假数据,后续解析就全乱了。
真正能落地的方案必须分段校验 0–255:
-
25[0-5]覆盖 250–255 -
2[0-4][0-9]覆盖 200–249 -
1[0-9][0-9]覆盖 100–199 -
[1-9]?[0-9]覆盖 0–99(注意含单独的0)
组合后完整表达式为:\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b
Notepad++里必须勾选的三个选项
缺一不可,否则边界失效、大小写干扰、跨行错配都会发生:
- 勾选「匹配大小写」——不是为了区分大小写,而是让
\b在 Notepad++ 中真正生效(旧版引擎依赖此开关激活单词边界) - 勾选「匹配整个单词」——确保
\b能正确锚定 IP 前后是空格/换行/标点,而不是嵌在 URL 或长数字串里 - 禁用「. 匹配换行符」——否则
.会吞掉换行,导致跨行匹配出192.168.1\n255这种伪 IP
带端口的 IP 怎么一起提取
很多网络日志里 IP 后紧跟冒号和端口(如 10.0.0.1:3000),原生 IPv4 正则不包含这部分。要连端口一起捕获,只需在末尾加 (?::\d{1,5})?:
完整表达式:\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b(?::\d{1,5})?
注意:\d{1,5} 覆盖 1–65535 端口范围,但 Notepad++ 不校验端口合法性,只做格式兜底。
替换导出比“查找全部”更可靠
「查找全部」只能高亮并手动复制,容易漏行、混入无关上下文。真正批量导出需走「替换」闭环:
- 查找框填上面任一 IP 正则(含端口版也行)
- 替换框填:
$0\r\n($0表示整条匹配内容,\r\n强制换行) - 点「全部替换」→ 所有匹配 IP 单独成行,其余内容被清空
- 再 Ctrl + H → 查找
^\s*$(空行),替换为空 → 删净空白行 - 菜单栏「编辑」→「行操作」→「删除重复行」→ 去重完成
端口是否保留、是否去重、是否补协议——这些逻辑都在替换阶段可控,比靠眼睛扫安全得多。


















