用于替换完全匹配的Java正则表达式

时间:2012-07-26 10:40:44

标签: java regex

我的java应用程序正在尝试修改文件中的以下行:

static int a = 5;

目标是将'a'替换为'mod_a'。

使用简单的string.replace(var_name, "mod" + var_name)给出了以下内容:

stmod_atic int mod_a = 5;

这是完全错误的。谷歌搜索我发现你可以前置“\ b”然后var_name必须代表一个单词的开头,但是,string.replace("\\b" + var_name, "mod" + var_name)绝对没有做任何事情:(

(我也测试了“\ b”而不是“\ b”)

2 个答案:

答案 0 :(得分:9)

  • \b这里是一个regular expression,意思是一个单词边界,所以它几乎就是你想要的。
  • String.replace() 使用正则表达式(因此\b只匹配文字\b)。
  • String.replaceAll() 使用正则表达式
  • 您也可以在变量之后的之前使用\b ,以避免将“aDifferentVariable”替换为“mod_aDifferentVariable”。

所以可能的解决方案是:

String result = "static int a = 5;".replaceAll("\\ba\\b", "mod_a");

或更一般:

static String prependToWord(String input, String word, String prefix) {
    return input.replaceAll("\\b" + Pattern.quote(word) + "\\b", Matcher.quoteReplacement(prefix + word));
}

请注意,如果Pattern.qoute()包含在正则表达式中有意义的任何字符,我会使用word。出于类似的原因,Matcher.quoteReplacement()用于替换字符串。

答案 1 :(得分:4)

尝试:

string.replaceAll("\\b" + var_name + "\\b", "mod" + var_name);