最稳妥的纯空行匹配正则是^\s*(?=\r?$)\n,它能匹配含空格、制表符等空白字符的“假空行”,兼容windows(crlf)和mac/linux(lf)换行格式。

用 ^\n 正则匹配纯空行,但容易漏掉带空格的“假空行”
直接搜 ^\n 只能删掉真正什么都没有的空行(换行符前无任何字符),一旦某行有空格、制表符或全角空格,它就完全匹配不到。这是最常踩的坑——你以为删干净了,结果提交代码后 Git diff 还在飘白线。
更稳妥的做法是用这个正则:^\s*(?=\r?$)\n。它会匹配:行首开始、中间全是空白字符(\s)、后面紧跟换行符(\n),且不消耗换行符本身((?=\r?$) 是正向先行断言)。这样连 (四个空格)+ 换行也会被识别为可删空行。
- 操作路径:Ctrl+R → 勾选
Regex→ 搜索框粘贴^\s*(?=\r?$)\n→ 替换框留空 → 点Replace All - 注意:如果文件是 Windows 换行(CRLF),
\r\n会被整体匹配;Mac/Linux(LF)也兼容,不用额外切换单独规则 - 别在未保存时直接全项目替换,先试一个 PHP 文件看效果
批量删空行前必须关掉 EditorConfig 支持
很多团队项目根目录有 .editorconfig,它会强行覆盖 PhpStorm 的格式化行为。哪怕你设置了 Keep maximum blank lines = 1,只要 Enable EditorConfig support 是开启状态,Ctrl+Alt+L 或正则替换后的空行数量仍可能被它悄悄改回去——尤其是 insert_final_newline 或 trim_trailing_whitespace 类规则会干扰正则结果。
临时关闭路径:Settings > Editor > Code Style > Enable EditorConfig support(取消勾选)→ 点 Apply。
- 关完立刻试一次
^\s*(?=\r?$)\n替换,确认空行真的没了,再决定是否永久关掉 - 如果团队强制要求保留
.editorconfig,那就别依赖正则批量删空行,改用「保存时自动清理」组合策略(见下一条)
想一劳永逸?靠保存时自动 strip + Code Style 控制空行数
正则是一次性手术刀,适合救急;长期维护靠的是让 PhpStorm 在你每次保存时自动处理。这比手动搜删更可靠,也避免误删逻辑需要的空行(比如类方法之间本该有间隔)。
两个关键设置必须配对生效:
-
Settings > Editor > General > On Save > Strip trailing spaces on Save(建议选All lines) -
Settings > Editor > Code Style > PHP > Blank lines > Keep maximum blank lines设为1;再展开下方Before/After class、Before/After method等选项,把数字统一调成1或0(按团队规范)
改完务必点 Apply —— 不点等于没设。之后每按 Ctrl+S,文件就会自动:删行尾空格、压平连续空行、保持结构间合理间距。
整项目批量删空行时,vendor 和 node_modules 必须跳过
用 Code > Reformat Code(Ctrl+Alt+L)选中整个项目去格式化,看着很爽,但 vendor 目录里的第三方包一旦被重排空行,可能触发 Composer autoload 异常,或让 PHPUnit 测试因换行敏感断言失败;node_modules 同理,某些 JS 包的构建脚本会校验源码换行一致性。
安全做法是:右键点击 src 或 app 这类自己写的目录 → Reformat Code → 勾选 Optimize imports 和 Reformat code → 点 Preview 先看改动范围,确认没扫到不该动的目录再执行。
真正麻烦的不是正则写不对,而是忘了不同场景该用不同工具:救急用 ^\s*(?=\r?$)\n,日常靠保存自动清理,批量处理必须人工圈定范围并预览。漏掉任意一层,所谓“一键删除”,最后都可能变成线上 bug 的起点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










