Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌入式参数的Java表达式_Java_Regex - Fatal编程技术网

嵌入式参数的Java表达式

嵌入式参数的Java表达式,java,regex,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

我正在为我的模式定义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));
    }
}

有人能解释一下我的错误吗?谢谢。

{
是正则表达式中的一个特殊字符,只需对其进行双转义即可。
\{
。与
}
相同


还要考虑到,如果使用
*
,它也将匹配空字符串。

{
是正则表达式中的一个特殊字符,只需对其进行双转义即可。
\{
。与
}
相同


还要考虑到,如果使用
*
,它也会匹配空字符串。

您的
模式存在一些问题

  • 首先,您不需要外括号,因为您没有从主组定义组save
  • 其次,您必须避开花括号(
    \\{
    ),否则它们将被解释为量词
  • 第三,您不需要最后一个量词(
    *
    ),因为您在同一输入
    字符串中迭代匹配项
因此,您的
模式
看起来像
“\\{\\d+\}”

有关Java
Pattern
s的更多信息

编辑--示例

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}

您的
模式存在一些问题

  • 首先,您不需要外括号,因为您没有从主组定义组save
  • 其次,您必须避开花括号(
    \\{
    ),否则它们将被解释为量词
  • 第三,您不需要最后一个量词(
    *
    ),因为您在同一输入
    字符串中迭代匹配项
因此,您的
模式
看起来像
“\\{\\d+\}”

有关Java
Pattern
s的更多信息

编辑--示例

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}

我使用了“\{\\d+\\}”,但它不起作用。你能给我看一下模式吗?@Luu请看我的编辑。如果你去掉括号,你不能引用组1,只需通过
Matcher.group()
方法引用组0。它现在起作用了。如果我使用m.group(1),它会引发异常,但是如果group(),它会起作用。谢谢。我接受你的解决方案。我使用了“\\{\\d+\}但它不起作用。你能给我看一下模式吗?@Luu请看我的编辑。如果删除括号,你不能引用组1,只需通过
Matcher.group()
方法引用组0。它现在起作用了。如果我使用m.group(1),它会抛出异常,但如果group(),有效。谢谢。我接受你的解决方案。结尾的花括号不需要转义。@CasimiritHippolyte可能不需要,但至少对我来说这会让人困惑。结尾的花括号不需要转义。@CasimiritHippolyte可能不需要,但至少对我来说会让人困惑。