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

Java正则表达式:为YAML中不含foo的schemas行追加foo

解决方案

核心思路

你之前的正则用了(?s)单行模式,导致会检查整个文本是否存在foo,而非仅针对schemas:所在的单行判断。正确做法是启用多行模式,只对目标行做匹配和检查。

正则表达式与替换规则

  • 正则表达式(必须启用多行模式Pattern.MULTILINE):
    ^(\\s*schemas:)(?!.*\\bfoo\\b)(.*)$
    
  • 替换字符串:
    $1$2,foo
    

正则各部分解释

  • ^\\s*schemas::匹配以任意数量空格开头、后跟schemas:的行首内容(捕获为分组1)
  • (?!.*\\bfoo\\b):负向预查,确保当前行里没有独立的foo(\\b是单词边界,避免误匹配foobar这类包含foo的字符串;不需要精确匹配的话可以去掉\\b)
  • (.*)$:匹配该行schemas:之后的所有内容(捕获为分组2)

Java代码示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class YamlSchemaUpdate {
    public static void main(String[] args) {
        String yaml = """
              schemas: core,ext,plugin
              config: foo,test
              another: bar
              """;

        // 编译正则,启用多行模式
        Pattern pattern = Pattern.compile("^(\\s*schemas:)(?!.*\\bfoo\\b)(.*)$", Pattern.MULTILINE);
        Matcher matcher = pattern.matcher(yaml);

        // 执行替换
        String updatedYaml = matcher.replaceAll("$1$2,foo");
        System.out.println(updatedYaml);
    }
}

效果说明

  • 若schemas:行不含foo,会自动追加,foo,比如 schemas: core,ext,plugin会变成 schemas: core,ext,plugin,foo
  • 若schemas:行已包含foo,则不做任何修改
  • 其他行的foo完全不影响匹配结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:10:56