Java Regex和replaceAll

时间:2015-03-12 07:55:50

标签: java regex

我有以下文字:

  

Testlalatest

我正在尝试用另一个字符串

替换lala

仅当Test[replace]test之后或之后有任何字符时,输出应为lala

但我得到了:Tes[replace]est

代码:

strLine = strLine.replaceAll("\\w"+word+"\\w", replaceWord);

2 个答案:

答案 0 :(得分:4)

您可以使用外观来确保您的单词前面和后面跟着一个单词字符。

strLine = strLine.replaceAll("(?<=\\w)" + word + "(?=\\w)", replaceWord);

或者在任何一方使用\B

strLine = strLine.replaceAll("\\B" + word + "\\B", replaceWord);

RegEx Demo

答案 1 :(得分:1)

工作示例:

public class Main {
    public static void main(String[] args) {
        for (String prefix : new String[] { "pre", "" }) {
            for (String suffix : new String[] { "suf", "" }) {
                String toReplace = "lala";
                String before = prefix + toReplace + suffix;
                System.out.println(before + " -> "
                        + before.replaceAll("(?<=.)" + toReplace
                        + "|" + toReplace + "(?=.)", "[replaced]"));
            }
        }
    }
}

输出:

prelalasuf -> pre[replaced]suf
prelala -> pre[replaced]
lalasuf -> [replaced]suf
lala -> lala

Information on the relevant regex syntax.

正如所评论的那样,你为一个单词字符写了//w而不是\\w,这很奇怪。我不确定之前是如何取代的。

另外,您说您想要匹配任何字符,这意味着您要使用.,而不是\\w