我是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中没有。我错过了什么?
答案 0 :(得分:6)
Java不支持命名捕获。
答案 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