Java 正则表达式导致堆栈溢出错误

Java 正则表达式导致堆栈溢出错误,java,regex,scala,parsing,Java,Regex,Scala,Parsing,我有下面的regexp (([^'])|(''))* 通常能够很好地解析文本 但使用以下文本(您可以尝试): 有什么问题吗? 是否可能因为字符串太长(2030个符号)而出现这种异常? 或者我这里有一些特殊的符号导致了这个错误 任何值得欣赏的想法首先,你不需要内心的捕捉群体。重复捕获组只捕获最后一个事件,因此在Java中它们是无用的 接下来,您可以使用这个正则表达式,使其线性匹配(无需占用大量资源的交替): 请看演示 图案细节: [^']*-匹配除' (?:''[^']*)*-匹配零个或多个

我有下面的regexp

(([^'])|(''))* 
通常能够很好地解析文本

但使用以下文本(您可以尝试):

有什么问题吗? 是否可能因为字符串太长(2030个符号)而出现这种异常? 或者我这里有一些特殊的符号导致了这个错误


任何值得欣赏的想法首先,你不需要内心的捕捉群体。重复捕获组只捕获最后一个事件,因此在Java中它们是无用的

接下来,您可以使用这个正则表达式,使其线性匹配(无需占用大量资源的交替):

请看演示

图案细节

  • [^']*
    -匹配除
    '
  • (?:''[^']*)*
    -匹配零个或多个以下序列:
    • -两个单撇号
    • [^']*
      -除
      '

@anubhava它还有一个例外,那就是你的威克托。这对我有帮助。你能告诉我如何学习regexp以充分了解高效使用吗?有什么书、课程吗?奥雷利的《掌握正则表达式》被认为是最好的教科书。定期检查,这里有一个人非常精通正则表达式的性能。嗯,还有很多,但它们并不经常出现。
xxxxxxx_xxx_xxxxxxx=xxxxxx.xxxxxxxxxxx.xxxxxxx.xxxxxxxxxx`2[xxxxxx.xxxxxx,xxxxxx.xxxxxx]xxxxxxx_xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxxxxxxxxxxxx=1455544499467&xxxxxxxxx_xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xx=xxxxxxx &xxxxxxx_xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxxxx=xxxxxxx_701454xx-x23x-4x31-xx75-xxx185x3xx26&xxxxxx_xxxxxxxx_xxx_xxxxxxxxxx=xxxxx&xxxxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxxxxx=xxxxxxx&xxxxxxxx_xxx_xx=xxxxxxx_2x542x7x-7x94-4867-8819-239x732xx3x1&xxxxxxxxxxxxx_xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxxxxxxxxxx=xxxxx&xxxxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxxxxxxxxx=xx-xx&xxxxxxx_xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxxx=7&xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxxxxxxxx=xxx2012x2xx.xxx.xxx:82&xxxxxxx_xxxxxxxxx_xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxx=11.0&xxxxxxxxx_xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxx=xxxx&xxxxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxxxxxxx=xxxxxxxxx&xx_xxxxxxxxx_xxxxxxxxxxxxxxxx_xxxxxxxxxxx_xxxxx_xxx_xxxxxxx=xx 6.3&xxxxxxxxxxx_xxxxx_xxx_xxxxxxxxxxxxxxxxxxx=<xxxxxxx-xxxxx xxxxx="xxx">xxxxxx xxxxxx"></xxxxxxx><xxxxxxx-xxxx xxx-xxxxx="xx_xxxx" xxxxxxxx="xxxx" xxxx="xxxxxxxxxxx xxxx"><xxxx-xx-xxxxxx xxxxxxxxxxx="xxxx"><xxxxx>xxxxxxxxxx</xxxxx><xxxxx>xxxxx</xxxxx><xxxxx>xxx</xxxxx><xxxxx>xxxxxxxxx</xxxxx><xxxxx>xxxxxxx</xxxxx></xxxx-xx-xxxxxx></xxxxxxx-xxxx><xxxxxxx-xxxx xxx-xxxxx="xx_xxxxxxxx" xxxxxxxx="xxxxxxxx" xxxx="xx_xxxxxxxx"/><xxxxxxx-xxxx xxx-xxxxx="xx_xx_xxxxx" xxxxxxxx="xxxx" xxxx="xxxxxxx - xxxxxx xxxxxx?"><xxxx-xx-xxxxxx xxxxxxxxxxx="xxxxx"> 2</xxxxx></xxxx-xx-xxxxxx><xxxxx>xxxx</xxxxx><xxxxx>xxxxx</xxxxx></xxxx-xx-xxxxxx></xxxxxxx-xxxx><xxxxxxx-xxxx xxx-xxxxx="xx_xxxx_xxxx" xxxxxxxx="xxxx" xxxx="xx_xxxx_xxxx"></xxxxxxx><xxxxxxx-xxxx xxx-xxxxx="xx_xxxxxxx" xxxxxxxx="xxxxxx" xxxx="xx_xxxxxxx"></xxxxxxx><xxxxxxx-xxxx xxx-xxxxx="xx_xx_xxxxxxxxxxxxxx_xxxxxx" xxxxxxxx="xxxx"xxxx="xxxxxxx - xxxxxxxxxxxxxx xxxxxx"></xxxxxxx><xxxxxxx-xxxx xxx-xxxxx="xx_xxxxxx" xxxxxxxx="xxxx" xxxx="xxxxxxxxxxx xxxxxx">')
Exception in thread "main" java.lang.StackOverflowError
    at java.util.regex.Pattern$Branch.match(Pattern.java:4600)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
    at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
    at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
    at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
[^']*(?:''[^']*)*