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



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

目前我正在使用这个定义:

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

我在这一页找到了大部分的定义:http://ostermiller.org/findcomment.html

问题是,当匹配我的输入时,我得到一个stackoverflow。然而,将我的堆栈大小调整到1 mb可以解决这个问题。不幸的是,这在我的生产系统中是不可能的。所以我想问的是,有没有人能帮我改进一下正则表达式?

帮助将是非常感激的,因为我只是一个新手在Regex世界:)

提前感谢。

Stefan问好。

使用normal* ( special normal*) *模式进行注释。你需要多行匹配。

这里,special*而不是/, normal不是*。未加引号的正则表达式

  • 特殊为*(?!/);
  • 正常为[^*] .

我不懂scala,但是你需要定义一个特殊变量,一个普通变量,使用:

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

,这将吞噬你的空白,而不用担心堆栈溢出

最新更新