Sublime正则跨行匹配需勾选“Match newlines”或用[\s\S]代替.,(?s)须置于正则开头;捕获组提取字段仅在替换中通过$1生效,Find All不输出子串;Find in Files结果含路径行号,需二次清理。

Sublime里怎么让正则跨行匹配
默认情况下,. 不匹配换行符,所以 foo.*bar 在两行之间断开就失效。想跨行,必须显式启用“Match newlines”选项(查找面板右下角勾选 .\n 图标),或在正则里用 [\s\S] 代替 .。
常见错误现象:写 start.*end 却只匹配单行内容;或用 (?s) 但没加到正则开头,导致不生效。
-
(?s)start.*end——(?s)是内联标志,必须放在最前面才管用 -
start[\s\S]*?end—— 更直观、兼容性更好,?防止贪婪匹配过长 - 大文件慎用
[\s\S]*,可能卡顿;优先用[\s\S]*?或限定范围,比如start[\s\S]{0,500}?end
用捕获组提取关键字段,不是整行
如果你只想拿 href="xxx" 里的 xxx,而不是整行,必须用小括号包住目标部分,并在复制后依赖 $1(仅限替换面板)或手动清理——Find All 不输出捕获组,它只选中整个匹配项。
实操建议:
- 查找框填:
href=(["'])([^"']*)\1→ 匹配带引号的 href 值,URL 在第 2 组 - 替换框填:
$2→ 只保留 URL,这是唯一能直接“提取”子串的方式 - 别在
Find in Files里指望$1,它不支持捕获组引用,复制出来的是带前缀的整行 - 如果要批量提取多个字段(如 name 和 value),得拆成多轮查找+替换,或导出后用脚本处理
Find All 选中后怎么真正拿到纯文本内容
Find All 后光标停在每个匹配起始位置,但不会自动选中整段内容——尤其当正则含捕获组时,Sublime 默认只高亮整个匹配,而非组内内容。
正确流程:
- 输入正则(如
"([^"]*)"),点Find All - 此时所有双引号字符串已被选中(因为没捕获组干扰)→ 直接
Ctrl+C即可复制纯文本列表 - 如果用了捕获组(如
"([^"]*)"),Find All仍选中整个"xxx",想只取xxx,必须走替换流程:Ctrl+H→ 查找同上 → 替换为$1→Replace All - 粘贴后常带多余空行或缩进,建议补一刀:
^\s+|\s+$替换为空,清理首尾空白
为什么 Find in Files 提取出的内容带路径和行号
Find in Files(Ctrl+Shift+F)的结果页本质是只读视图,格式固定为 文件名:行号:内容,它不提供“导出纯匹配项”开关。
你只能手动处理:
- 结果页中按
Ctrl+A全选 →Ctrl+C复制 - 粘贴到新文件后,用正则删前缀:
^.*?:\d+:\s*替换为空(注意 Windows 换行符影响) - 若目标是提取多个文件里的同一类字段(如所有
api/路径),先用Find in Files把含关键词的行捞出来,再对这个结果集开新标签,用Ctrl+H+ 捕获组二次提取 - 别尝试在
Find in Files面板里直接点“Replace in Files”,它不支持$1,会把$1当字面量写进去
真正麻烦的不是写正则,而是 Sublime 从不自动区分“匹配项”和“上下文行”,也不自动剥离元信息。每一步都得你决定:这次要整行?要字段?要跨文件?要纯文本?选错路径,后面全是手工擦屁股。

















