如何在java正则表达式中包含命名捕获组?

时间:2010-06-07 14:12:17

标签: java regex

我是Java的正则表达式的新手,我无法弄清楚如何在表达式中包含命名的捕获组。我正在为Confluence's Universal Wiki Converter编写一个ScrewTurn图像转换器。这就是我所拥有的:

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 个答案:

答案 0 :(得分:6)

Java不支持命名捕获。

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

答案 1 :(得分:6)

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

另见:http://java.sun.com/javase/7/docs/api/java/util/regex/Pattern.html#groupname