Java 回溯中不允许重复正则表达式
Java regex repetition not allowed inside lookbehind
我正在寻找一种在每第 3 个逗号之后拆分字符串的方法。我找到了 2013 Split a String at every 3rd comma in Java 的旧答案,我认为它已经过时了。如果我按原样复制粘贴接受的答案,我会收到一个编译错误
repetition not allowed inside lookbehind
我正在使用带有 Java 11 的 Intellij,如果这很重要的话
下面来自链接 post
的已接受答案的示例
String data = "0,0,1,2,4,5,3,4,6";
String[] array = data.split("(?<=\G\d+,\d+,\d+),");
for(String s : array){
System.out.println(s);
}
如果以上不正确,正确的方法是什么?
在很多情况下 lookahead/behind 中的无限重复是不允许的。然而,这不是其中之一。
您发现了一个 IntelliJ 错误。该错误由 intellij(不是 javac
)报告。错误地认为这是您不能这样做的情况之一。
告诉 intellij 停止抱怨。您很可能无法做到这一点。我想提交错误报告。重点是,如果你拿那个源文件,只是 运行 javac ThatFile.java
它编译并且 运行s 没有问题。
您可以通过 'faking out' intellij 解决这个问题。它正在对该字符串进行编译时检查,因为 intellij 意识到,作为一个常量,它可以做到这一点。您可以通过将其设为动态字符串来避免 intellij 的损坏分析。例如:
data.split((System.currentTimeMillis() < 0 ? "A?" : "") + "(?<=.. rest of regex here ..");
IntelliJ 现在可能会确定该字符串是动态的,因此无法进行分析。因此,它不会。
但是,在跳过这些愚蠢的圈套之前,intellij 中可能有一个关于 'smart analysis of regex literals' 或诸如此类的设置。至少在修复此错误之前将其关闭。
我正在寻找一种在每第 3 个逗号之后拆分字符串的方法。我找到了 2013 Split a String at every 3rd comma in Java 的旧答案,我认为它已经过时了。如果我按原样复制粘贴接受的答案,我会收到一个编译错误
repetition not allowed inside lookbehind
我正在使用带有 Java 11 的 Intellij,如果这很重要的话
下面来自链接 post
的已接受答案的示例String data = "0,0,1,2,4,5,3,4,6";
String[] array = data.split("(?<=\G\d+,\d+,\d+),");
for(String s : array){
System.out.println(s);
}
如果以上不正确,正确的方法是什么?
在很多情况下 lookahead/behind 中的无限重复是不允许的。然而,这不是其中之一。
您发现了一个 IntelliJ 错误。该错误由 intellij(不是 javac
)报告。错误地认为这是您不能这样做的情况之一。
告诉 intellij 停止抱怨。您很可能无法做到这一点。我想提交错误报告。重点是,如果你拿那个源文件,只是 运行 javac ThatFile.java
它编译并且 运行s 没有问题。
您可以通过 'faking out' intellij 解决这个问题。它正在对该字符串进行编译时检查,因为 intellij 意识到,作为一个常量,它可以做到这一点。您可以通过将其设为动态字符串来避免 intellij 的损坏分析。例如:
data.split((System.currentTimeMillis() < 0 ? "A?" : "") + "(?<=.. rest of regex here ..");
IntelliJ 现在可能会确定该字符串是动态的,因此无法进行分析。因此,它不会。
但是,在跳过这些愚蠢的圈套之前,intellij 中可能有一个关于 'smart analysis of regex literals' 或诸如此类的设置。至少在修复此错误之前将其关闭。