在 java 风格的注释上使用正则表达式时堆栈溢出
我目前正在 Scala 中编写一个解析器,我希望将空白定义为匹配空白和 java 风格的 /* */
注释。我不需要 //
部分。
目前我正在使用这个定义:
"""((\s+)|(?:/\*(?:[^*]|(?:\*+[^*/]))*\*+/))*""".r
我在这个页面上找到了这个定义的大部分内容: http://ostermiller.org/findcomment.html
问题是我在匹配时遇到了 stackoverflow我的意见。不过,将堆栈大小调整为 1 MB 可以解决问题。不幸的是,这在我的生产系统中是不可能的。 所以我要问的是,是否有人可以帮助我改善我的正则表达式?
非常感谢您的帮助,因为我只是正则表达式世界的新手:)
提前致谢。
问候斯特凡。
I'm currently writing a parser in Scala, where I want to have my whitespace defined as matching on both whitespace, and java styled /* */
comments. I don't need the //
part.
Currently I'm using this definition:
"""((\s+)|(?:/\*(?:[^*]|(?:\*+[^*/]))*\*+/))*""".r
I have found most of this definition on this page:
http://ostermiller.org/findcomment.html
The problem is that I'm getting a stackoverflow when matching my input. However adjusting my stacksize up to 1 mb fixes the problem. This is unfortunately not a possibility in my production system.
So what I'm asking for, is if somebody could help me improve my regular expression?
Help would be much appreciated, since I'm only a novice in the Regex world:)
Thanks in advance.
Regards Stefan.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
normal* (special normal*) *
模式进行注释。您将需要多行匹配。在这里,
special
是*
后面没有/
,normal
是除*
以外的任何内容>。不带引号的正则表达式比较\*(?!/)
;[^*]
。我不懂scala,但你需要定义一个特殊的变量,一个普通的变量,使用:
/\**(*)*\*/
这会吞掉你的空白,而不用担心堆栈溢出。
Use the
normal* ( special normal*) *
pattern for comments. You'll need multiline matching.Here,
special
is*
not followed by a/
andnormal
is anything but*
. Unquoted, regexes are\*(?!/)
;[^*]
.I don't know scala, but you need to define one var for special, one var for normal, use:
/\*<normal>*(<special><normal>*)*\*/
and this will swallow your white spaces without a fear of stack overflow.