代码之家  ›  专栏  ›  技术社区  ›  jrummell

如何在Java正则表达式中包含命名捕获组?[复制品]

  •  5
  • jrummell  · 技术社区  · 15 年前

    这个问题已经有了答案:

    对于Java中的正则表达式,我是新手,我不知道如何在表达式中包含命名的捕获组。我正在写一个螺旋旋转图像转换器 Confluence's Universal Wiki Converter . 这就是我所拥有的:

    String image = "\\[image(?<align>auto)?\\|\\|{UP\\(((?<namespace>\\w+)\\.)?(?<pagename>[\\w-]+)\\)}(?<filename>[\\w- ]+\\.[\\w]+)\\]";
    
    Pattern imagePattern = Pattern.compile(image, Pattern.CASE_INSENSITIVE);
    

    它把这个例外抛入 Pattern.comiple() :

    java.util.regex.PatternSyntaxException: Unknown look-behind group near index 19
    \[image(?<align>auto)?\|\|{UP\(((?<namespace>\w+)\.)?(?<pagename>[\w-]+)\)}(?<filename>[\w- ]+\.[\w]+)\]
                       ^
    

    我以前在C中使用过这样的命名捕获组# (?<namedgroup>asdf) ,但不是在Java中。我错过了什么?

    2 回复  |  直到 15 年前
        1
  •  6
  •   Community CDub    8 年前

    Java不支持命名捕获。

    来源: Are Java and C# regular expressions compatible?

        2
  •  6
  •   Mark Peters    15 年前

    看来Java只会在版本7中开始支持命名捕获组: Matcher (SE 6) VS Matcher (SE 7)

    还可以看到: http://java.sun.com/javase/7/docs/api/java/util/regex/Pattern.html#groupname