【问题标题】:Notepad++ multi-line regex replacement only replacing first lineNotepad++ 多行正则表达式替换仅替换第一行
【发布时间】:2015-03-05 13:27:12
【问题描述】:

我想用单个正则表达式替换所有操作来注释掉大量的多行日志记录语句。

我的 [可能] 多行语句如下所示:

logger.info( "Log Message: [" + myVariable 
    + "] is has a value of: [" + myVariable.getValue() + " ]"
    + LogColors.ANSI_RESET );

以下正则表达式语句(启用 .matches newline)成功找到(并选择)所有适当的行,直到结束分号。

(logger\..+?\);)

但是,当我尝试将所有内容替换为:

// \1

只有我标记的封闭表达式() 的第一行被替换。所以我留下了这个编译器不友好的多行语句:

// logger.info( "Log Message: [" + myVariable 
    + "] is has a value of: [" + myVariable.getValue() + " ]"
    + LogColors.ANSI_RESET );

【问题讨论】:

    标签: regex notepad++ multiline


    【解决方案1】:

    与其将所有内容都强制为单行注释,不如尝试使其成为多行注释。将其替换为/* \1 */。你的正则表达式是一样的,但它消除了编译器讨厌它的问题。

    这还具有保持代码相同的优点,因此当您取消注释时不会丢失格式(这通常会使代码更易于阅读)。

    注意:如果这不是 Java,请将 /* */ 替换为相关的多行代码。

    【讨论】:

    • 这很聪明。但他的语言必须支持它。
    • @AmitJoki 我相当有信心该语言是 Java,所以它可能会工作。
    • 语言是Java!我什至没有考虑过使用多线 cmets。这种方法也将使反向操作更容易(取消注释日志语句)。
    【解决方案2】:

    如果您可以发表类似 /* sth */ 之类的评论,我建议:

    (?<!/\* )logger\..+?\);(?! \*/)
    

    并替换为:

    /* $0 */
    

    See the DEMO

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 2021-02-03
      • 2012-04-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多