notepad++提取ip应避免全行匹配和不严谨正则,推荐使用带负向断言、数值校验(0–255)、点号转义的正则,并通过替换为$0\r\n导出纯ip列表;旧版本需降级兼容写法。

Notepad++ 里提取 IP 地址,别用 ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 这种“全行匹配”写法——它根本跑不通,因为 IP 几乎不会独占一行。
为什么 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 会漏匹配或错匹配
这个正则看着像模像样,但实际在 Notepad++ 中问题很多:
- 它不检查每段数字是否 ≤255,
999.999.999.999也会被匹配出来 - 没加边界控制,
abc192.168.1.1def会被截成92.168.1.1(开头的1和结尾的d都丢了) - Notepad++ 默认不支持
\b单词边界(尤其旧版本),\b192.168.1.1\b可能完全不生效 - 点号
.没转义,会匹配任意字符,不是字面意义的点
真正可用的 IP 提取正则:(?
这是兼顾兼容性与准确性的写法,已在 Notepad++ v7.9–v8.6 实测通过。关键点:
(? 和 <code>(? 是负向先行断言,防止前面连着数字或“数字.”(如 <code>1192.168.1.1不匹配)- 每段用
(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)严格限制 0–255,排除999类非法值 -
(?!\d)和(?!\.\d)是负向后行断言,防止后面跟着数字或“.数字”(如192.168.1.123x或192.168.1.1.2不匹配) - 所有点号
.都已转义为\.,确保只匹配真实句点 - 不用
\b,规避老版本 Notepad++ 不支持的问题
怎么导出纯 IP 列表(不是高亮,是可复制的文本)
仅靠「查找全部」只能看位置,无法批量导出。必须走替换流程:
- 打开「替换」对话框(
Ctrl+H) - 查找框填完整正则:
(? - 替换框填:
$0\r\n($0表示整个匹配项,\r\n是 Windows 换行) - 勾选「正则表达式」,点击「全部替换」
- 此时文档只剩 IP,每行一个;再按
Ctrl+A→Ctrl+C即可复制 - 如果出现空行,说明原文本有连续空白,执行一次「编辑 → 行操作 → 删除空行」即可
遇到内网地址或 IPv6 怎么办
上面的正则只处理标准 IPv4。如果你的文本含以下内容,需额外处理:
-
内网短格式(如
10.1、172.16.0):它们不符合四段结构,不能硬套 IPv4 规则。建议先人工确认上下文,再用更宽松的\b\d{1,3}(\.\d{1,3}){1,3}\b(不校验数值范围)捞出候选,人工复核 -
IPv6(如
2001:db8::1):Notepad++ 的 PCRE 引擎支持,但正则极长且易出错。推荐用专用工具(如 Python 的ipaddress模块)处理,Notepad++ 仅作辅助查看 -
混在 URL 或日志中(如
GET /api?ip=192.168.1.1 HTTP/1.1):上述正则本身已带前后断言,能正确提取192.168.1.1,无需额外修改
最常被忽略的是断言兼容性——(? 和 <code>(?!...) 在 Notepad++ v7.5.8+ 才稳定支持,低于此版本会直接报错或静默失效。如果替换无反应,先查版本号(帮助 → 关于 Notepad++),再降级用 [^\d.]((?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)){3})[^\d.] 并手动删掉首尾非 IP 字符。











