sublime 提取 ipv4 需用带负向断言和数值范围的正则:(?

Sublime 不能直接“一键提取 IP”,得靠正则 + 捕获组 + 手动复制三步走;漏掉括号捕获或没清理换行符,粘出来全是带前缀的垃圾。
怎么写能精准匹配 IPv4 字符串(不误抓身份证、端口号)
直接用 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 会把 1234.56.78.90 或 999.999.999.999 这种非法段也卷进来。必须加数值范围限制和词边界控制。
- 推荐正则:
(? (? 和 <code>(?!\d)是负向断言,防连在数字后面(比如abc192.168.1.1def里的 IP 不会被截断)- 别用
\b:中文混排或标点紧贴时它基本失效,(? 更稳 - 如果只是粗筛(比如日志里快速捞出疑似 IP),可用简化版:
(?,后续再人工过滤
为什么 Find All 后复制出来不是纯 IP 列表?
因为你没用捕获组——Find All 默认复制的是整个匹配内容,不是括号里那一段。哪怕你正则写对了,没 () 包住目标,结果就带前后干扰字符。
- 正确写法(只提取 IP 部分):
(?,注意最外层一对 <code>() - 输入后按
Ctrl+F→ 点.*→Find All→Ctrl+C,此时复制的就是括号内纯 IP - 如果复制后发现每行末尾多一个空格或换行混乱,说明源文本用了
CRLF(Windows 换行),而 Sublime 当前识别为LF;右下角点击换行符标识,切到Windows (CRLF)再试
跨文件批量提取 IP 怎么避免结果带路径和行号?
Find in Files(Ctrl+Shift+F)出来的结果是 file.js:42:...192.168.1.1... 这种格式,不能直接当 IP 列表用。
- 搜索时仍用上面带捕获组的正则,但别指望结果页自动提取——它不支持
$1引用 - 搜完后全选结果(
Ctrl+A)→ 粘贴到新标签页 → 再用Ctrl+H替换:^[^:]+:\d+:\s*(.*)$→ 替换为:$1 - 如果某行没匹配上(比如空行或格式异常),
$1会变成空,所以替换后立刻执行一次Ctrl+H查找^\s*$并替换为空,清掉所有空行 - 路径栏务必填具体范围,例如
./src/**/*.js;留空 = 只搜当前文件,不是全项目
真正麻烦的不是写正则,而是换行符隐式不一致、中文界面插件干扰高亮、以及复制时剪贴板吞掉最后一行——每次提取完先手动滚动到底部看有没有缺行,比什么都靠谱。











