Java正则表达式的后视组没有明显的最大长度

我要:

当我得到一个大字符串时,我需要使用Java中的正则表达式在其中查找内容,以使用以下公式分隔:

  • 如果一行(在\ n之后)有超过1000个字符,请检查第1000个字符是否包含在奇数'
  • 然后添加一个连续字符串’\ n ||’ 在1000到1001个字符之间
  • 如果1000和1001个字符是”(plsql的转义字符),则将其插入1001和1002之间

无论如何,我做了这个正则表达式:

 "\n(?[^\n]{1000})(?<=(?\n)(?[^'\n]{0,1001}|[^\n']{0,1001}'[^\n']{0,1001}'[^\n']{0,1001}){0,1001}(?')(?[^\n']{0,1001}))(?(?<=')(?!'))" 

让我解释一下:

 "\n(?[^\n]{1000}) --> Newline and 1000 characters (? Let's look behind to check if we have an odd number of ' (?\n) --> Start from new line (? --> All pairs of ' [^'\n]{0,1001} --> Eighter 0 ' | --> or [^\n']{0,1001}'[^\n']{0,1001}'[^\n']{0,1001}){0,1001} --> (text* ' text* ' text* )* (?') --> Last comma (?[^\n']{0,1001}) --> Text after that comma ) --> End of actual looking behind (?(? This part check if we are inside an escaped character '' as we can not concat stuff between here 

无论如何,似乎我得到了下面的错误。

线程“main”中的exceptionjava.util.regex.PatternSyntaxException:Look-behind组在索引161附近没有明显的最大长度

  (?[^ ]{1000})(?<=(? )(?[^' ]{0,1001}|[^ ']{0,1001}'[^ ']{0,1001}'[^ ']{0,1001}){0,1001}(?')(?[^ ']{0,1001}))(?(?<=')(?!')) ^ at java.util.regex.Pattern.error(Unknown Source) at java.util.regex.Pattern.group0(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.util.regex.Pattern.(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.lang.String.replaceAll(Unknown Source) 

为什么这样做? 我没有使用{0,1001}代替*来限制吗?

Java的正则表达式引擎不支持可变长度外观。 这意味着当后面的长度不固定时,引擎将抛出此exception。 你看后面的长度是可变的,因此你会得到这个例外。

Java正则表达式错误 – 后瞻组没有明显的最大长度