Java正则表达式

时间:2011-09-07 11:08:32

标签: java regex

我正在尝试使用Java中的Regexes解析以下内容。

My Test String包含"${}"内的字符串,例如ex "Test ${template} in ${xyz} : ${abc}"

我正在尝试使用(\$\{[^\}]+\})形式的正则表达式来匹配它。当前正则表达式与测试字符串中的任何内容都不匹配。

如果我添加(.*?)(\$\{[^\}]+\})(.*?)以使其不合适,那么在给我任何我想要匹配的内容时实际上并不一致。

我的正则表达式有什么问题?我该如何解决?

6 个答案:

答案 0 :(得分:6)

大多数时候,当有人提出正则表达式问题时,我要求他们至少考虑Commons Lang StringUtils

String[] names = substringsBetween(theString, "${", "}");

答案 1 :(得分:4)

public static void main(String[] args) throws Exception {

    String test = "Test ${template} in ${xyz} : ${abc}";

    Matcher m = Pattern.compile("\\$\\{[^\\}]+\\}").matcher(test);

    while (m.find())
        System.out.println(m.group());
}

输出:

${template}
${xyz}
${abc}

答案 2 :(得分:1)

你可能也必须逃避括号:

jcomeau@intrepid:/usr/src/clusterFix$ python
Python 2.6.7 (r267:88850, Jun 13 2011, 22:03:32) 
[GCC 4.6.1 20110608 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> s = 'Test ${template} in ${xyz} : ${abc}'
>>> re.compile('\$\{[^}]+\}').findall(s)
['${template}', '${xyz}', '${abc}']

答案 3 :(得分:1)

    String test = "Test ${template} in ${xyz} : ${abc}";
    Pattern p = Pattern.compile("\\$\\{[^}]+\\}");
    Matcher matcher = p.matcher(test);
    while (matcher.find()) {
        System.out.println(matcher.group());
    }

答案 4 :(得分:0)

        String ip="Test ${template} in ${xyz}";
        Pattern p = Pattern.compile("\\{.*?\\}");
        Matcher m =p.matcher(ip);
        while(m.find())
        {
            System.out.println(m.group());
        }

答案 5 :(得分:0)

一个斜线是不够的。你需要两个斜杠。

试试这个正则表达式:

\\$\\{.+\\}

它检查带有$ {和}周围文本的字符串。这会过滤掉空白字符串(${})和任何未正确关闭的字符串。

如果您想检查前方和后方的文字,请尝试.+\\$\\{.+\\}.+