在Java样式的注释上使用正则表达式时堆栈溢出

时间:2011-12-14 08:21:29

标签: regex performance stack-overflow

我目前正在Scala中编写一个解析器,我希望将我的空白定义为在空白和java样式/* */注释上匹配。我不需要//部分。

目前我正在使用此定义:

"""((\s+)|(?:/\*(?:[^*]|(?:\*+[^*/]))*\*+/))*""".r

我在此页面上找到了大部分定义: http://ostermiller.org/findcomment.html

问题是我在匹配输入时得到了stackoverflow。但是,将堆栈大小调整为1 mb可以解决问题。遗憾的是,这在我的生产系统中是不可能的。 所以我要求的是,如果有人可以帮助我提高我的正则表达式吗?

非常感谢帮助,因为我只是Regex世界的新手:)

提前致谢。

关心Stefan。

1 个答案:

答案 0 :(得分:0)

使用normal* ( special normal*) *模式进行评论。你需要多线匹配。

此处special *后面没有/normal*之外的任何内容。不带引号,正则表达式

  • special is \*(?!/);
  • normal是[^*]

我不知道scala,但你需要为特殊定义一个var,为普通定义一个var,使用:

/\*<normal>*(<special><normal>*)*\*/

这会吞下你的白色空间而不用担心堆栈溢出。