检查字符串是否在括号{}中,但忽略" \ {"和" \}"

时间:2014-04-28 20:55:15

标签: java regex

我想检查给定的文本是否被大括号包围,但是当它们被“转义”时也想忽略它们。所以我希望匹配{Something}但不匹配\{Something\} ...

最简单的方法是什么?

1 个答案:

答案 0 :(得分:0)

可以使用负面后卫,即没有反斜杠。但如果反斜杠是常规转义字符,则\\{将是反斜杠加括号。

对于那种情况,请执行:

Pattern pattern = Pattern.compile("(\\\\.|[^{\\\\])*\\{" // All upto open brace
        + "(\\\\.|[^}\\\\])*" // The sought, $2
        + "\\}"); // Closing brace

String s = "...";
Matcher m = pattern.matcher(s);
while (m.find()) {
    System.out.println(m.group(2);
}

模式

(
    \\\\.             backslash followed by any char
|                     or
    [^{\\\\]          not one of: '{' or backslash
)