如何在Eclipse中搜索和替换两行(一起)?

如何在Eclipse中搜索和替换两行(一起)?,eclipse,editor,replace,Eclipse,Editor,Replace,我想通过eclipse在多个文件中搜索以下两行: @Length(max = L_255) private String description; 并将其替换为以下两个: @Length(max = L_255, message="{validator.description.len}") private String description; 选择包含所有文件的文件夹,然后按Ctrl+H键。使用正则表达式时,Eclipse中的搜索默认为多行: (\@Length\(max = L_255)

我想通过eclipse在多个文件中搜索以下两行:

@Length(max = L_255)
private String description;
并将其替换为以下两个:

@Length(max = L_255, message="{validator.description.len}")
private String description;

选择包含所有文件的文件夹,然后按Ctrl+H键。

使用正则表达式时,Eclipse中的搜索默认为多行:

(\@Length\(max = L_255)\)([\r\n\s]+private)
我想添加“私有字符串描述

替换为:

\1, message="{validator.description.len}")\2
它在由CTRL-H触发的文件搜索中非常有效


如中所述,您可以直接复制在“包含文本”字段中选择的两行:这些行将通过Eclipse转换为regexp。

关于如何获取所选块的regex的另一个技巧。 打开包含要搜索或替换的多行(多行)的文件之一。 单击Ctrl+F并选择“正则表达式”。关闭“查找/替换”窗口。 选择所需的块,然后再次单击Ctrl+F以打开“查找/替换”窗口。 现在,在“查找”文本框中有了与选择块完全匹配的正则表达式


(我是在为很长的块手动创建regexp之后才发现这一点的:)

CTRL+H在使用regexp时需要两行代码(而且您不必自己编写regexp,eclipse会为您编写)

  • 选择你的线路
  • 单击CTRL+H。将打开搜索对话框。 如果已选中“正则表达式”,eclipse将已将搜索的两行代码转换为regexp,请单击搜索。 如果“正则表达式”尚未选中,请选中它并单击取消(eclipse会记住您的选择)
  • 再次选择您的行
  • 单击CTRL+H。搜索对话框打开。这次已选择“正则表达式”。eclipse将已将搜索的两行内容转换为regexp,单击搜索

  • 在手动构造的正则表达式中包含多行的快速提示:

    您通常使用<代码> *>代码>来匹配任何字符零次或多次,而应考虑使用诸如<代码>(.:\\r\\n)*< /C> >之类的东西,或在最后添加额外的<代码> 以使其不贪婪。


    解释
    与新行不匹配,因此需要执行“非此即彼”操作“:括号与管道前的
    或管道后的新行匹配。
    之后的
    \r
    使换行符之前的回车可选,以允许Windows或Unix换行。
    ?:
    将整个内容作为捕获组排除(这有助于避免堆栈溢出)。

    将该行作为代码,以显示它位于两行上。CTRL+H不允许我为搜索和替换添加两行单独添加行吗?或者尝试使用多行正则表达式。我无法单独执行,因为它可能会影响其他字段。我无法找出正确识别上述两行的多行表达式,因此产生了这个问题。我想添加“私有字符串描述”;这也是我搜索的一部分,因为@Length(max=L_255)行也用于其他字段,如“私有字符串名”。所以上面的建议行不通。我正在尝试搜索多个连续的行。@Samuel:添加了图片,更新了答案以考虑您的完整行。它将适用于多个连续行。试试看。我最喜欢你对解决方案的描述,简单、快速、万无一失。Thnx!第二行是隐藏的宝石功能..谢谢你的提示!谢谢,你为我节省了很多时间,让我知道如何构建我的正则表达式。你可以使用这个技巧来构建正则表达式,并将其复制到文件搜索中。非常节省时间,谢谢!这确实是一个很酷的功能,虽然它并没有解决我的问题。并不是所有的超级英雄都穿斗篷。这就是为什么我没有看到一个。当我在Eclipse(4.5)中以:
    publisher(?。\r?\n)*
    的形式尝试此操作时,它在“查找模式太复杂”对话框中显示了一个错误编辑:在末尾添加问号为:
    publisher(?。\r?\n)*?
    使其工作起来!感谢您的提示和正则表达式解释。在某些情况下,如果我在要搜索的第二个单词中添加太多字符,我仍然会看到“查找模式太复杂”错误。因此
    publisher(?:。\r?\n)*?id
    有效,但
    publisher(?:。\r?\n)*?identification
    显示错误
    \1, message="{validator.description.len}")\2