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

如何在Java中使用正则表达式提取大括号模式中的变量?

带大括号变量的提取方案

完全支持匹配任意带大括号的变量,只要模式与目标值的结构对应,就能通过正则表达式提取变量及对应的值。

正则匹配思路

将模式中的{变量名}替换为非贪婪捕获组(.*?),同时对模式中的固定文本做正则特殊字符转义,这样就能精准匹配目标值并捕获变量对应的内容。比如给定模式anyValue{variable1}otherValue{variable2}lastValue,转换后的正则为anyValue(.*?)otherValue(.*?)lastValue。

Java实现示例

以下代码可自动解析任意带大括号变量的模式,生成正则并提取变量值:

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

public class VariableExtractor {
    public static void main(String[] args) {
        String patternStr = "anyValue{variable1}otherValue{variable2}lastValue";
        String valueStr = "anyValuehellootherValueworldlastValue";
        
        Map<Integer, String> variableMap = new HashMap<>();
        StringBuilder regexBuilder = new StringBuilder();
        int varIndex = 0;
        int i = 0;

        // 遍历模式,生成正则并记录变量名
        while (i < patternStr.length()) {
            if (patternStr.charAt(i) == '{') {
                i++;
                int end = patternStr.indexOf('}', i);
                if (end != -1) {
                    variableMap.put(++varIndex, patternStr.substring(i, end));
                    regexBuilder.append("(.*?)");
                    i = end + 1;
                } else {
                    regexBuilder.append(Pattern.quote("{"));
                    i++;
                }
            } else {
                regexBuilder.append(Pattern.quote(String.valueOf(patternStr.charAt(i))));
                i++;
            }
        }

        // 匹配并输出结果
        Pattern pattern = Pattern.compile(regexBuilder.toString());
        Matcher matcher = pattern.matcher(valueStr);
        if (matcher.find()) {
            variableMap.forEach((index, name) -> System.out.println(name + ": " + matcher.group(index)));
        } else {
            System.out.println("值与模式不匹配");
        }
    }
}

运行结果

执行上述代码,输出如下:

variable1: hello
variable2: world

核心特性

  • 支持任意数量、任意命名的带大括号变量,只要模式中的大括号成对出现即可。
  • 自动转义正则特殊字符(如.、*等),避免模式中的固定文本干扰匹配逻辑。
  • 采用非贪婪匹配(.*?),确保每个变量只匹配到下一段固定文本前的内容,不会出现跨变量的错误匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:21