如何在Java中匹配适当的大括号(使用正则表达式)

时间:2014-10-06 13:29:24

标签: java regex string pattern-matching backreference

我想匹配大括号({})括起的字符串中的部分,并返回大括号内的内容。 大括号内的内容也可以包含“嵌套”大括号,这使得匹配正确的结束大括号变得很重要。 因此,如果打开另一个括号,则应忽略以下右括号。

作为一个起点,我使用了以下代码,它应该将字符串Stuff @upper{foo {bar} baz} {end}转换为Stuff FOO {BAR} BAZ {end}

package com.stackoverflow;

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

public class RegExBraces {

    public static void main(String[] args) {
        String string  = "Stuff @upper{foo {bar} baz} {end}";

        Pattern pattern = Pattern.compile("@upper\\{(.*?)\\}");

        Matcher matcher = pattern.matcher(string);
        StringBuffer result = new StringBuffer();

        while (matcher.find()) {
            String key = matcher.group(1);
            if (key != null) {
                matcher.appendReplacement(result, key.toUpperCase());
            }
        }
        matcher.appendTail(result);

        System.out.println(result.toString());

    } // END: main()

} // END: class

首先,我想忽略大括号的转义(\{\})。因此,按正确的顺序始终有相同数量的打开和关闭括号。

是一个可以解决这个问题的简洁正则表达式吗?

0 个答案:

没有答案