假设您有一个 Java 文件,其中包含许多单字母变量名称,例如 a、x、f 等,并且您想将它们更改为更有意义的名称。您可以尝试将每次出现的 'f' 替换为 'filename',但这会弄乱单词中出现 'f' 的所有位置(例如在关键字 if 中)。您将如何使用正则表达式搜索和替换来纠正这个问题?
我需要在 Emacs 中使用单词边界来编写它。由于我是新手,使用 Matcher 类是否适用?
这是基于此问题的答案:
find-name-dired
.~/Dropbox/source/java/
.*.java
. 您最终将进入一个dired
包含项目根目录中所有 java 文件的缓冲区。dired-do-query-replace-regexp
。现在系统会提示您输入要替换的内容 - 输入 eg \bf\b
。接下来,输入替换,例如filename
。\bm\b
所有 java 文件中出现的所有情况。您必须每次都输入SPC以接受或n跳过当前实例。通过键入 替换时,您可以看到所有选项?。\bj\b 应该找到字母 i 的位置。因此,b 之间的任何约束都是要找到的字符。
如果您必须使用本机 emacs 执行此操作:单词边界是合理的搜索边界。Matcher 类是一个Java 构造。如果您正在编写代码来进行搜索和替换。由于您完全在 emacs 中执行此操作,因此它不适用。
需要注意的是,这些变量不能从多个源文件中使用,否则你会搞砸的。
不过,我不会用原始的 emacs 来做这件事。我会使用 IDE 重构工具。Emacs 甚至有一个可以安装的Java Refactoring 。使用重构工具,该工具可以理解语法并且比正则表达式更具体。