我目前正在Scala中编写一个解析器,我想在其中将空白定义为匹配空白和java风格的/* */
注释。我不需要//
部分。
目前我正在使用这个定义:
"""((s+)|(?:/*(?:[^*]|(?:*+[^*/]))**+/))*""".r
我在这一页找到了大部分的定义:http://ostermiller.org/findcomment.html
问题是,当匹配我的输入时,我得到一个stackoverflow。然而,将我的堆栈大小调整到1 mb可以解决这个问题。不幸的是,这在我的生产系统中是不可能的。所以我想问的是,有没有人能帮我改进一下正则表达式?
帮助将是非常感激的,因为我只是一个新手在Regex世界:)
提前感谢。
Stefan问好。
使用normal* ( special normal*) *
模式进行注释。你需要多行匹配。
这里,special
是*
而不是/
, normal
不是*
。未加引号的正则表达式
- 特殊为
*(?!/)
; - 正常为
[^*]
.
我不懂scala,但是你需要定义一个特殊变量,一个普通变量,使用:
/*<normal>*(<special><normal>*)**/
,这将吞噬你的空白,而不用担心堆栈溢出