我目前正在Scala中编写一个解析器,我希望将我的空白定义为在空白和java样式/* */
注释上匹配。我不需要//
部分。
目前我正在使用此定义:
"""((\s+)|(?:/\*(?:[^*]|(?:\*+[^*/]))*\*+/))*""".r
我在此页面上找到了大部分定义: http://ostermiller.org/findcomment.html
问题是我在匹配输入时得到了stackoverflow。但是,将堆栈大小调整为1 mb可以解决问题。遗憾的是,这在我的生产系统中是不可能的。 所以我要求的是,如果有人可以帮助我提高我的正则表达式吗?
非常感谢帮助,因为我只是Regex世界的新手:)
提前致谢。
关心Stefan。
答案 0 :(得分:0)
使用normal* ( special normal*) *
模式进行评论。你需要多线匹配。
此处special
*
后面没有/
,normal
除*
之外的任何内容。不带引号,正则表达式
\*(?!/)
; [^*]
。我不知道scala,但你需要为特殊定义一个var,为普通定义一个var,使用:
/\*<normal>*(<special><normal>*)*\*/
这会吞下你的白色空间而不用担心堆栈溢出。