我正在为我的模式定义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));
}
}
有人可以解释我的错误吗?感谢。
答案 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}