【问题标题】:Search and replace strings in Java source files using Emacs and regular expressions使用 Emacs 和正则表达式搜索和替换 Java 源文件中的字符串
【发布时间】:2013-07-20 15:00:53
【问题描述】:

假设您有一个 Java 文件,其中包含许多单字母变量名,例如 a,x,f 等,并且您想将它们更改为更有意义的东西。你可以试试 用“文件名”替换每次出现的“f”,但这会弄乱所有地方 其中“f”出现在一个单词中(例如在关键字 if 中)。你会怎么做 使用正则表达式搜索和替换来纠正这个问题?

我需要在 Emacs 中使用单词边界来编写它。由于我是新人,使用 Matcher 类是否适用?

【问题讨论】:

    标签: regex emacs


    【解决方案1】:

    如果您必须使用本机 emacs 执行此操作: 词边界是合理的搜索边界。 Matcher 类是一个Java 构造。如果您正在编写代码来进行搜索和替换。由于您完全在 emacs 中执行此操作,因此它不适用。

    需要注意的是,这些变量不能从多个源文件中使用,否则会搞砸。

    不过,我不会用原始的 emacs 来做这件事。我会使用 IDE 重构工具。 Emacs 甚至有一个可以安装的Java Refactoring。使用重构工具,该工具可以理解语法并且比正则表达式更具体。

    【讨论】:

    • 我能从你那里得到答案吗?
    • 答案是什么?我对我理解的问题提供了答案。如果您正在寻找其他内容,请澄清。
    • 我自己得到了答案。
    【解决方案2】:

    这是基于question的答案:

    1. 在使用 any 工具做这种事情之前,版本控制 everything。我推荐git
    2. M-x find-name-dired.
    3. 输入项目根目录的路径,例如~/Dropbox/source/java/
    4. 输入java文件通配符:*.java。 您最终将进入一个 dired 缓冲区,其中包含项目根目录中的所有 java 文件。
    5. t - 这会将所有文件标记为 dired。这意味着他们将成为目标 下一次操作。
    6. Q - 这调用dired-do-query-replace-regexp。 现在系统会提示您输入要替换的内容 - 输入例如\bf\b。 接下来,输入替换例如filename
    7. 现在,Emacs 将引导您了解所有 java 文件中出现的所有 \bm\b。 您必须每次键入 SPC 接受或 n 跳过 当前实例。替换时您可以通过键入 ? 查看所有选项。
    8. 最后,C-x s

    【讨论】:

      【解决方案3】:

      \bj\b 应该找到字母 i 的位置。因此,b 之间的任何绑定都是要找到的字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-27
        • 1970-01-01
        相关资源
        最近更新 更多