正则表达式 java.lang.StackOverflowError

MinThinking 2010-04-21 04:26:31
使用正则表达式匹配一个大字符串时,会报java.lang.StackOverflowError。在网上搜了下 没找到比较好的解决方案,谁有比较好的解决办法说下! 要使用正则表达式的方式,其他的方式不太好(因为我的匹配模式比较复杂,所以觉得用正则比较方便)。

下面大家都说说解决思路和办法吧! 谢谢!
...全文
353 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaohaixiax 2011-05-19
  • 打赏
  • 举报
回复
楼主怎么解决的,我现在也遇到这种问题了。。。
justlearn 2010-04-23
  • 打赏
  • 举报
回复
楼主解决了?给个思路
lvnannan123 2010-04-22
  • 打赏
  • 举报
回复
我公司从事软件外包,现在在招聘网上很难找到愿意外包的软件工程师,特在此寻找人才,有意向的请联系我,0571-56884997
licip 2010-04-22
  • 打赏
  • 举报
回复
把内存加大一点吧。
hbgzg3006 2010-04-22
  • 打赏
  • 举报
回复
楼主你不能详细说明,示意一下也好啊。你的字符串,以及你写的正则的思路。
给定的字符串满足以下这个,单纯是这个的话。不要用正则了。
(meta)*, (typedef)*, (import)*, (class|subclass|joined-subclass|union-subclass)*,(resultset)*, (query|sql-query)*,(filter-def)*,(database-object)+
干嘛非要(meta)*这样,你直接if (str.contains("meta"))不就行了。
MinThinking 2010-04-22
  • 打赏
  • 举报
回复
有好的解决办法 说说啊! 别单纯的顶
hbgzg3006 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 minthinking 的回复:]

引用 19 楼 hbgzg3006 的回复:

楼主你不能详细说明,示意一下也好啊。你的字符串,以及你写的正则的思路。
给定的字符串满足以下这个,单纯是这个的话。不要用正则了。
(meta)*, (typedef)*, (import)*, (class|subclass|joined-subclass|union-subclass)*,(resultset)*, (query|sql-……
[/Quote]
既然这样,你可以试试这么做。
所有的捕获组()都换成这样
(?:meta)*,(?:typedef)*,……(?:class|subclass|joined-subclass|union-subclass)*……,意思并没有改变,只不过现在不放在内存里了。
MinThinking 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hbgzg3006 的回复:]

楼主你不能详细说明,示意一下也好啊。你的字符串,以及你写的正则的思路。
给定的字符串满足以下这个,单纯是这个的话。不要用正则了。
(meta)*, (typedef)*, (import)*, (class|subclass|joined-subclass|union-subclass)*,(resultset)*, (query|sql-query)*,(filter-def)*,(dat……
[/Quote]

现在要判断字符串是否符合某个规则,就想DTD的约束那样 ,用字符的方法好像收不到那种效果的吧!
wjz748305545 2010-04-21
  • 打赏
  • 举报
回复
接分,顶
qjtttt 2010-04-21
  • 打赏
  • 举报
回复
晕,几万。。。。。
楼主试试写两个正则
字符串从中间一刀分,一个正则匹配前半段,一个匹配后半段
感觉可能还是行不通,呵呵
我也只会玩一般的正则,调优也不会。。。
我随便说说
zfq642773391 2010-04-21
  • 打赏
  • 举报
回复
要不要试试拆分一下字符串啊
zfq642773391 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 minthinking 的回复:]
引用 3 楼 minthinking 的回复:

跟分组没有多大关系吧 现在就是匹配的字符串长度太长了。
比如说给定的字符串要满足以下条件
(meta)*, (typedef)*, (import)*, (class|subclass|joined-subclass|union-subclass)*,(resultset)*,(query|sql-query)*,(filter-def)*……
[/Quote]
几万!!!也太大了点吧
MinThinking 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 minthinking 的回复:]

跟分组没有多大关系吧 现在就是匹配的字符串长度太长了。
比如说给定的字符串要满足以下条件
(meta)*, (typedef)*, (import)*, (class|subclass|joined-subclass|union-subclass)*,(resultset)*,(query|sql-query)*,(filter-def)*,(database-object)+;

但是……
[/Quote]

长度大概几万字符吧
hbgzg3006 2010-04-21
  • 打赏
  • 举报
回复
楼主说一下你的字符串多长?还有你的正则怎么写的。
zfq642773391 2010-04-21
  • 打赏
  • 举报
回复
不会啊 正则只会一般的 调优就不会了
等待高手...
  • 打赏
  • 举报
回复
学习。。。。
cooler4k 2010-04-21
  • 打赏
  • 举报
回复
如果你只想知道是匹配的结果,那分组都用非捕获的 (?:meta)* ...
因为分组结果肯定是会占用空间的,至于效果咋样,你试试吧
zfq642773391 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 minthinking 的回复:]
引用 2 楼 zfq642773391 的回复:

递归太深了,把正则贴出来,让大家看看能不能简化一下


跟正则有关系吗?应该是跟字符串长度有关的吧?
[/Quote]
恩 应该是字符串太大的缘故吧
MinThinking 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 justlearn 的回复:]

匹配表达式加参数试试

Pattern.compile(你的表达式,Pattern.DOTALL + Pattern.MULTILINE)
[/Quote]

这个我试过了 不行的! 有没有其他的外部jar能跳过堆栈操作的,我用了apache的regex jar也不行
justlearn 2010-04-21
  • 打赏
  • 举报
回复
PS:DOTALL模式不一定需要,看你需求
加载更多回复(5)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧