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

如何编写正则表达式匹配patch文件多行列(忽略!后注释)

匹配Patch文件中忽略注释后内容一致的差异片段

需求说明

处理patch(diff)文件时,需匹配以下场景:ASCII文件中!后的内容为注释,需忽略该部分;当-开头行与+开头行去掉注释后的内容完全一致时,匹配对应的片段(支持单行和多行连续匹配)。

解决方案

核心正则表达式(兼容单行/多行)

使用支持PCRE的正则引擎,开启多行模式(m flag),正则如下:

(?m)(?:^-\s*(.+?)\s*!.*\r?\n^\+\s*\1\s*!.*(?:\r?\n|$))+

正则拆解

  • (?m):启用多行模式,让^/$匹配每行的开头/结尾
  • ^-\s*(.+?)\s*!.*:捕获-行的有效内容:
    • ^-:匹配行首的减号
    • \s*:匹配减号与内容间的空格(可选)
    • (.+?):非贪婪捕获!之前的所有有效内容(避免包含注释)
    • \s*!.*:匹配!及之后的全部注释内容
  • \r?\n:兼容Windows(\r\n)和Unix(\n)换行格式
  • ^\+\s*\1\s*!.*:匹配对应的+行:
    • ^\+:匹配行首的加号
    • \s*\1:引用之前捕获的-行有效内容,前后允许空格
    • \s*!.*:匹配该行的注释部分
  • +:允许上述“-行+对应+行”的组合重复多次,实现多行连续匹配

场景验证

  • 匹配成功:示例1的三对对应行、示例2的单行对应对都会被完整匹配
  • 匹配失败:示例3中+行内容与-行不对应,正则无法匹配

注意事项

  • 确保使用的工具/语言支持PCRE语法和多行模式(如grep -P、Python re模块、VS Code查找替换等)
  • 假设有效内容中不包含!(若需支持内容含!,需调整为匹配最后一个!之前的内容,正则改为^-\s*(.+)\s*!.*)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:58:10