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

Java正则表达式:拆分双花括号外短横线分隔的字符串

Java正则拆分双花括号外部的短横线

问题分析

你需要拆分字符串中仅位于{{}}外部的短横线,内部的-需保留。之前尝试的正则逻辑错误,导致拆分结果不符合预期。

正确正则表达式及代码

使用以下正则可以精准匹配{{}}外部的-:

import java.util.Arrays;

public class SplitTest {
    public static void main(String[] args) {
        String regex = "-(?=(?:[^}{]*{{[^}{]*}})*[^}{]*$)";
        // 测试示例1
        String str1 = "{{abc-def}}-123-benefit-{{ghi}}";
        String[] result1 = str1.split(regex);
        System.out.println(Arrays.toString(result1));
        // 测试示例2
        String str2 = "abc-{{123-def}}-benefit-{{ghi}}";
        String[] result2 = str2.split(regex);
        System.out.println(Arrays.toString(result2));
    }
}

输出结果

["{{abc-def}}", "123", "benefit", "{{ghi}}"]
["abc", "{{123-def}}", "benefit", "{{ghi}}"]

正则逻辑解释

-(?=(?:[^}{]*{{[^}{]*}})*[^}{]*$) 各部分作用:

  • -:匹配目标短横线
  • (?=...):正向预查,确保后续内容满足条件才匹配当前-
  • (?:[^}{]*{{[^}{]*}})*:匹配任意数量的完整{{...}}块([^}{]*匹配非{}的任意字符)
  • [^}{]*$:匹配剩余的非{}字符直到字符串结尾

整体逻辑:确保当前-后面的{{和}}是成对出现的,即该-不在任何{{}}内部。

之前正则的问题

  • 第一个正则-(?!\\{\\{^\\{\\{\\}\\}*\\}\\}):负向预查的表达式逻辑混乱,无法正确识别括号内的区域,导致误拆分了{{}}内部的-。
  • 第二个正则-(?:[^,\"]|\"[^\"]*\")+-":逻辑完全偏离需求,针对的是引号包裹的内容,和{{}}无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:38:00