【问题标题】:Regex that catches comments outside quotes捕获引号之外的评论的正则表达式
【发布时间】:2015-05-21 18:09:32
【问题描述】:

我正在尝试从给定行中删除 (/* comment*/) 形式的 cmets,但我不想删除引号内的 cmets。例如,如果我有以下行:

(this /* is "dd" a*/ line "we are /* inside a*/ quote" end of /* the line*/)

我正在寻找正确的正则表达式(在替换所有方法的帮助下)以获得以下结果:

(this  line "we are /* inside a*/ quote" end of )

我对正则表达式知之甚少——我们将不胜感激,谢谢。

【问题讨论】:

  • 我不认为正则表达式(单独)是适合这项工作的工具。
  • 您有什么建议吗?
  • 使用适当的解析器生成器并将其指定为语法。
  • 这就是我说单独的原因。
  • @aioobe 一旦正则表达式完成了它的工作,解析器就没有什么可做的了(至少,就这个问题而言)。删除 cmets 不是解析器的工作。

标签: java regex parsing


【解决方案1】:

在 Java 中你可以使用这个正则表达式:

str = str.replaceAll("(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/\\*.*?\\*/", "");

RegEx Demo

如果注释块在双引号之外,此正则表达式将通过使用前瞻来确保在注释块之前有偶数个引号。

【讨论】:

  • 所以你是说那些未转义的" 不会触发语法错误?我真的很怀疑。
  • 是的,这个正则表达式目前仅在代码中处理未转义的",当然它应该是\"(固定)。谢谢!
  • @anubhava 这个正则表达式很好,但它不适用于以下字符串:/*"*/ "hi /*" /*"*/,我们将不胜感激。
  • 除此之外,正则表达式方法只有在 ' 平衡且未转义时才起作用。对于这样的边缘情况,构建一个解析器。
  • 我已经构建了一个解析器,它完美地工作。感谢您的澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 2013-07-18
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2017-06-24
  • 2018-02-17
相关资源
最近更新 更多