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

Java正则表达式求助:提取"+"到行尾的文本内容

搞定Git Diff新增行提取的问题

我看你现在是想从Git Diff里揪出所有以+开头的行,提取+后面的内容,但之前的代码没成功,问题主要出在正则和字节流处理上,我帮你一步步修正:

先说说之前代码的问题

  1. 正则写窄了:你用的(\\+)(.*)(,)要求行必须以逗号结尾,但很多新增行(比如+ context: projectRoot、+ output: {)根本没有逗号,自然匹配不到。
  2. 没锚定行开头:正则没加^,可能会误匹配行中间的+,比如字符串里的加号,而不是行首的新增标记。
  3. 字节流没重置:每次循环处理DiffEntry时,baos会累加之前的内容,导致后面的匹配混进了旧的diff数据。

修正后的完整代码

String codeDiff = "";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DiffFormatter df = new DiffFormatter(baos);
df.setRepository(git.getRepository());
List<String> diffCodes = new ArrayList<>();
List<String> packageChangesArray = new ArrayList<>();

// 关键:调整后的正则,匹配行首的+,并捕获后面的内容
Pattern p = Pattern.compile("^\\s*\\+(.*)$", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);

for (DiffEntry entry : diffs) {
    baos.reset(); // 每次处理新条目时清空字节流,避免累加
    df.format(df.toFileHeader(entry));
    codeDiff = new String(baos.toByteArray());
    diffCodes.add(codeDiff);
    
    Matcher m = p.matcher(codeDiff);
    while (m.find()) {
        // 获取+后面的内容,trim可以去掉前后多余空白,不需要的话删掉就行
        String extractedContent = m.group(1).trim();
        System.out.println("提取到的新增行内容:" + extractedContent);
        packageChangesArray.add(extractedContent);
    }
}

代码细节说明

  • 正则^\\s*\\+(.*)$:
    • ^:锚定到行开头,确保只匹配行首的+,不会误抓行中间的加号
    • \\s*:兼容有些diff格式里+前面可能带的空白(比如缩进后的新增行)
    • \\+:匹配加号本身
    • (.*):捕获加号后面的所有内容直到行尾
  • baos.reset():每次处理新的DiffEntry时清空字节流,保证每次匹配的都是当前条目的diff内容,不会串味。
  • trim():可选操作,如果想保留原行的缩进空白,直接去掉trim()就行。

测试你的示例内容

用你给的示例diff测试,这个代码会提取到这些内容:

  • context: projectRoot,
  • entry: path.resolve(projectRoot, 'src/scripts/Index'),
  • resolve: {
  • extensions: ['', '.js', '.jsx'],
  • }; module: {
  • loaders: [{
  • test: /\.jsx?$/,
  • exclude: /node_modules/,
  • loader: 'babel?presets[]=stage-0,presets[]=react,presets[]=es2015', },
  • output: {
  • path: config.build.assetsRoot,
  • publicPath: deploymentBuild ? config.build.assetsPublicPath : config.dev.assetsPublicPath,
  • filename: '[name].js',
  • },

完全符合你要提取所有以+开头行的+到行尾文本的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:27:45