Java中索引附近的未知查找组

Java中索引附近的未知查找组,java,regex,Java,Regex,下面是一个失败代码的最低限度示例: 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

下面是一个失败代码的最低限度示例:

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。

我无法使用java 1.7或1.8重现此异常。该正则表达式在两种平台上都可以很好地编译

@zx81已经向我指出?。。。是命名组捕获的Java正则表达式语法。所以我检查了Javadoc,然后:

Java 1.8支持该语法 Java 1.7支持该语法 Java 1.6不支持该语法。
因此,我的理论是,您实际上是在用Java 1.6或更早版本的JRE执行代码,这是一种未知的后视。

我无法使用Java 1.7或1.8重现此异常。该正则表达式在两种平台上都可以很好地编译

@zx81已经向我指出?。。。是命名组捕获的Java正则表达式语法。所以我检查了Javadoc,然后:

Java 1.8支持该语法 Java 1.7支持该语法 Java 1.6不支持该语法。
因此,我的理论是,您实际上是在用Java 1.6或更早版本的JRE执行代码,这是一种不为人知的后顾之忧。

编译器的回答表明正则表达式语法无效:

?Pregex-是命名组的语法 ? 如果未设置转义符,则和“?”都是特殊字符,在一起没有任何意义,因此需要非任意延续,如

?i-不区分大小写的匹配 ?s-单线模式 ?:正则表达式-非捕获组等
编译器的回答表明正则表达式语法无效:

?Pregex-是命名组的语法 ? 如果未设置转义符,则和“?”都是特殊字符,在一起没有任何意义,因此需要非任意延续,如

?i-不区分大小写的匹配 ?s-单线模式 ?:正则表达式-非捕获组等
您打算怎么做?仅供参考,不知什么原因,当我在RegexBuddy中尝试命名捕获时,它希望添加UNICODE_CASE标志。你能试试这个,以防万一,看看问题是否消失了吗?Java正则表达式是超级马车!lol Pattern regex=Pattern.compile?Chicago,Pattern.CASE|u不区分| Pattern.UNICODE|u大小写;让我知道这是否有效。你打算怎么做?出于未知原因,当我在RegexBuddy中尝试命名捕获时,它希望添加UNICODE_CASE标志。你能试试这个,以防万一,看看问题是否消失了吗?Java正则表达式是超级马车!lol Pattern regex=Pattern.compile?Chicago,Pattern.CASE|u不区分| Pattern.UNICODE|u大小写;让我知道这是否有效。因此,我不仅必须在Eclipse的首选项中添加JRE 1.7,而且由于我的计算机在创建项目时最初使用1.6,因此我还需要删除构建路径上的JRE库,并将其替换为1.7。实际上,重要的是运行时类路径。您可能更改了这两个路径……因此,我不仅必须在Eclipse的首选项中添加JRE 1.7,而且由于我的计算机在创建项目时最初使用的是1.6,因此我还需要删除构建路径上的JRE库,并将其替换为1.7。实际上,重要的是运行时类路径。你可能改变了两条路。。。