【发布时间】:2013-12-20 15:22:24
【问题描述】:
我想:
当我得到一个大字符串时,我需要使用 Java 中的正则表达式在其中查找内容,以使用以下公式进行分隔:
- 如果一行(\n 之后)有超过 1000 个字符,请检查第 1000 个字符是否包含在奇数
'之后。 - 然后添加一个连接字符串'\n||'介于 1000 到 1001 个字符之间
- 如果 1000 和 1001 字符是 ''(plsql 的转义字符),则将其插入到 1001 和 1002 之间
反正我做了这个正则表达式:
"\n(?<kiloCharacters>[^\n]{1000})(?<=(?<newLine>\n)(?<pairsAndText>[^'\n]{0,1001}|[^\n']{0,1001}'[^\n']{0,1001}'[^\n']{0,1001}){0,1001}(?<oddComa>')(?<text>[^\n']{0,1001}))(?(?<=')(?!'))"
让我解释一下:
"\n(?<kiloCharacters>[^\n]{1000}) --> Newline and 1000 characters
(?<= --> Let's look behind to check if we have an odd number of '
(?<newLine>\n) --> Start from new line
(?<pairsAndText> --> All pairs of '
[^'\n]{0,1001} --> Eighter 0 '
| --> or
[^\n']{0,1001}'[^\n']{0,1001}'[^\n']{0,1001}){0,1001} --> (text* ' text* ' text* )*
(?<oddComa>') --> Last comma
(?<text>[^\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”java.util.regex.PatternSyntaxException 中的异常:后视组在索引 161 附近没有明显的最大长度
(?<kiloCharacters>[^
]{1000})(?<=(?<newLine>
)(?<pairsAndText>[^'
]{0,1001}|[^
']{0,1001}'[^
']{0,1001}'[^
']{0,1001}){0,1001}(?<oddComa>')(?<text>[^
']{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.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
为什么要这样做?我没有使用 {0,1001} 而不是 * 来限制吗?
【问题讨论】: