【问题标题】:regex to find an uncommented println正则表达式查找未注释的 println
【发布时间】:2011-03-21 07:21:28
【问题描述】:

有人可以分享一个在 java 代码中找到所有没有双斜线注释的 println 的正则表达式吗?

例子:

System.out.println("MATCH")   /*this line match*/
//    System.out.println("DOESN'T MATCH")  /*this line doesn't match*/

(我正在使用这个正则表达式来抛出 eclipse 搜索对话框)

【问题讨论】:

  • 正则表达式不是正确的工具。考虑:/* LINEBREAKS System.out.println("DOESN'T MATCH") LINEBREAKS */
  • 您可能应该标记问题eclipse,而不是java - 它可能使用不同的正则表达式风格,并且可能以不同的方式使用它。
  • @Bart Kiers:是的,你是对的。但是我以前以这种方式使用了查找和替换:查找所有 println 然后替换为 //println 。所以至少这条线应该可以工作
  • 更不用说/* // */ printlnstring s = "println"。哦,满满的乐趣。

标签: regex eclipse find


【解决方案1】:

好的,正如我已经提到的,正则表达式不是正确的工具,所以如果您最终使用我的建议,请务必备份您的源代码!

以下正则表达式匹配其中包含 System.out.printwithout ///* 的单行(在同一行中!)。

(?m)^((?!//|/\*).)*System\.out\.print.*

或者简单地说:

(?m)^[ \t]*System\.out\.print.*

然后可以替换为:

//$0

评论它。

再次重申:多行 cmets 会出错,正如 Kobi 提到的那样,/* // */ System.out.print... 之类的东西只是这个正则表达式会遇到的许多情况中的两个。

同时考虑这一行:

System.out.println("..."); /*
comments
*/

你不想最终得到:

//System.out.println("..."); /*
comments
*/

【讨论】:

  • @Bart Kiers:你有什么更好的工具可以推荐给我吗?
  • @0verbose,是的,一个合适的 Java 解析器。
  • @Bart Kiers:你能建议我在 eclipse 中使用一些东西吗?感谢您的耐心等待
  • @0verbose,不,我不能。如果这是您只要做一次的事情,请尝试我的 regex-hack,备份您的源代码并在替换后运行所有单元测试,看看您是否没有破坏任何东西。如果这是您要定期执行的操作(在这种情况下,我的问题是:“WHY?” :)),请不要使用简单的“搜索和替换”来执行此操作"。
  • @Bart Kiers:感谢您的正则表达式破解.. 似乎工作正常。我有一个讨厌的习惯,将 println 用于调试目的。
【解决方案2】:

你可以做一些简单的事情,比如:

^[ \t]*[^/][^/].*println.*

【讨论】:

    猜你喜欢
    • 2014-10-15
    • 2014-01-27
    • 1970-01-01
    • 2013-10-19
    • 2011-10-28
    • 2014-07-26
    • 2013-08-14
    • 2016-07-15
    • 2012-05-18
    相关资源
    最近更新 更多