You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则匹配移除代码块时误删前置空行,如何修正?

问题描述

现有内容结构如下:

lines with content :

Text before

// SHOW_DONE_BLOCK_START
/**
*
* Some Content
*

   
}
// SHOW_DONE_BLOCK_END

TEXT AFTER

使用正则~[^\S\n]*//[\s]*SHOW_DONE_BLOCK_.*~i移除包含// SHOW_DONE_BLOCK_的行后,残留了空行,且原正则会误匹配代码块前的空行。需要修改正则,彻底清除目标行的空行残留,同时不影响其他正常空行。

解决方案

修改正则表达式,匹配整个包含目标标记的行(包括换行符),替换后直接移除整行,不会留下空行。PHP代码如下:

$contents = preg_replace('~^\s*//\s*SHOW_DONE_BLOCK_.*\R?~mi', '', $contents);

正则说明

  • ^:在m(多行)修饰符下,匹配行首位置
  • \s*:匹配行开头的任意空白字符(空格、制表符等)
  • //\s*SHOW_DONE_BLOCK_:精准匹配目标标记,忽略标记前后的空白
  • .*:匹配该行剩余的所有内容
  • \R?:匹配任意换行符(?可选,处理最后一行无换行的情况)
  • mi修饰符:m启用多行模式,i忽略大小写

为什么原正则不行?

原正则仅替换了行内的标记内容,换行符未被匹配和移除,因此留下空行。新正则直接匹配完整的目标行(包括换行),替换后彻底移除整行,同时因为是从行首开始匹配目标标记,不会误删其他无关空行。

内容的提问来源于stack exchange,提问作者mstdmstd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:32:36