有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java提取以美元符号为前缀的大括号内占位符的内容

假设我有一个字符串"lore epsum dimsum ${ITEM_NAME} wonton kimchi"

我创建了一个正则表达式,它可以从字符串中的任何位置提取${ITEM_NAME}。这个正则表达式是,.{(.*.*)}

我如何定制这个正则表达式来提取${}之间的字符串,即ITEM_NAME


共 (1) 个答案

  1. # 1 楼答案

    使用{(.*.*)}模式,可以提取最左边的{和最右边的}之间的任何子字符串

    你需要

    \$\{([^{}]*)\}
    

    在Java中:

    String regex = "\\$\\{([^{}]*)\\}";
    

    regex demo

    如果明确要求只匹配${...}内的字母数字/下划线字符,则可以用\w+/\w*模式替换[^{}]*(Java字符串文字中的反斜杠加倍)

    Java demo

    import java.util.*;
    import java.util.regex.*;
    
    class Test
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            String text = "lore epsum dimsum ${ITEM_NAME} wonton kimchi ${ITEM_NAME_2}";
            Pattern p = Pattern.compile("\\$\\{([^{}]*)}");
            Matcher m = p.matcher(text);
            List<String> res = new ArrayList<>();
            while(m.find()) {
                res.add(m.group(1));
            }
            System.out.println(res);
        }
    }
    

    输出:

    [ITEM_NAME, ITEM_NAME_2]