嵌入式参数的Java表达式

时间:2013-12-12 17:09:09

标签: java regex

我正在为我的模式定义java表达式,但它不起作用。

以下是我要为其定义模式的文本:

"sometext {10} some text {25} sometext".

命名参数为{10}, {25}, ....

我使用了这样的模式:“({\ d +})*”但它没有用,我收到了异常:

Caused by: java.util.regex.PatternSyntaxException: Illegal repetition near index 0
({\d+})*

这是我的代码:

public static final Pattern pattern = Pattern.compile("({\\d+})*");
public static void main(String[] args) {
    String s = "{10}ABC{2}";
    Matcher matcher = pattern .matcher(s);
    while (matcher.find()) {
                System.out.println(matcher.group(1));
    }
}

有人可以解释我的错误吗?感谢。

2 个答案:

答案 0 :(得分:2)

{是正则表达式中的一个特殊字符,只需双重转义它\\{。与}相同。

另请注意,如果您使用*,它也会匹配空字符串。

答案 1 :(得分:2)

Pattern存在一些问题。

  • 首先,您不需要外括号,因为您没有从主要组中定义组保存。
  • 其次,您必须转义大括号(\\{),否则它们将被解释为量词。
  • 第三,您不需要最后一个量词(*),因为您在同一输入中迭代匹配String

因此,Pattern看起来像"\\{\\d+\\}"

有关Java Pattern s here的更多信息。

编辑 - 示例

String input = "sometext {10} some text {25} sometext";
Pattern p = Pattern.compile("\\{\\d+\\}");
Matcher m = p.matcher(input);
while (m.find()) {
    System.out.println(m.group());
}

<强>输出

{10}
{25}