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

发布于 2024-12-21 14:35:25 字数 510 浏览 0 评论 0原文

我目前正在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凶凌 2024-12-28 14:35:25

使用 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 / and normal is anything but *. Unquoted, regexes are

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文