如何在Eclipse中使用正则表达式匹配多行文本(DOTALL)?

4

我想把这个转换成:

  def getEmployeeReminders(employeeId: Int, page: Option[Int], pageSize: Option[Int], js_callback: Option[String]) = Action {
      val reminders = Reminder.listForOne(employeeId, page, pageSize)
      getResponse(reminders, js_callback)
    }

转换为:

  def getEmployeeReminders(employeeId: Int, page: Option[Int], pageSize: Option[Int], js_callback: Option[String]) =
    Restrict(companyAdmin, new MyDeadboltHandler) {
      Action {
        val reminders = Reminder.listForOne(employeeId, page, pageSize)
        getResponse(reminders, js_callback)
      }
    }

在Eclipse Scala编辑器中多次出现。

如何使用“.*”匹配多行? 另外,如何将换行符注入替换内容中?

2个回答

6
您可以使用 (?s) 内联模式修改器,它将强制点 . 匹配换行符。在您的答案中,您正在使用否定字符类,因此无需使用此修改器,只需使用 \n
Find:    = (Action[^}]*})
Replace: = \n    Restrict(companyAdmin, new MyDeadboltHandler) {\n     \1}

使用点号 . 代替:
Find:    (?s)= (Action.*?})
Replace: = \n    Restrict(companyAdmin, new MyDeadboltHandler) {\n     \1}

我尝试使用点号而不是否定字符类。然而,这并没有匹配到我想要的块,反而匹配了比预期更多的内容,因为它默认使用“贪婪”匹配。我怀疑有一种方法可以同时使用点号和指定非贪婪模式,但当时我很匆忙。 - Joel
1
使用.*?代替.*将使其变为非贪婪模式。 - hwnd

2
将以下内容放置在“查找”表达式的最开始处:(?s) 另外请注意,我们使用\R来插入换行符:
示例:
find:      (?s)= (Action[^}]*})
replace:   = \R    Restrict(companyAdmin, new MyDeadboltHandler) {\R     \1}

这需要像这样的东西:
  def getEmployeeReminders(employeeId: Int, page: Option[Int], pageSize: Option[Int], js_callback: Option[String]) = Action {
      val reminders = Reminder.listForOne(employeeId, page, pageSize)
      getResponse(reminders, js_callback)
    }

将其替换为以下内容:
  def getEmployeeReminders(employeeId: Int, page: Option[Int], pageSize: Option[Int], js_callback: Option[String]) =
    Restrict(companyAdmin, new MyDeadboltHandler) {
      Action {
        val reminders = Reminder.listForOne(employeeId, page, pageSize)
        getResponse(reminders, js_callback)
      }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接