这是一个失败的代码的极简主义样本:
String al = "(?<xyz>chicago)";
Pattern p = Pattern.compile(al, Pattern.CASE_INSENSITIVE);
我得到了:
java.util.regex.PatternSyntaxException: Unknown look-behind group near index 13
(?<xyz>chicago)
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.group0(Pattern.java:2505)
at java.util.regex.Pattern.sequence(Pattern.java:1806)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:847)
:
:
我缺少/忽视什么?我正在使用java 1.7开发Eclipse。
答案 0 :(得分:4)
我无法使用Java 1.7或1.8重现此异常。这个正则表达式在两个平台上编译都很好。
我(由@ zx81指出)(?<xyz>...)
是命名组捕获的Java正则表达式语法。所以我检查了Javadoc,并且:
所以我的理论是你实际上用Java 1.6(或更早版本的)JRE执行你的代码,这就是把它当作一种不为人知的看法。
答案 1 :(得分:0)
answer表示正则表达式语法无效:
(?P<name>regex)
-是命名组的语法(?<=regex) / (?<!regex)
是正向/负向后视如果未转义,则'('和'?'都是特殊字符,并且没有任何意义,因此需要非任意连续,例如
(?i)
-不区分大小写的匹配(?s)
-单行模式(?:regex)
-非捕获组等