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正则表达式错误 – 后瞻组没有明显的最大长度