Java Regex替换非字母数字字符包围的字符串

时间:2012-04-28 16:23:25

标签: java regex string replace

我需要一种方法来替换句子中的单词,例如“嗨,某事”。我需要用"hello, something"替换它。 str.replaceAll("hi", "hello")给了我"hello, somethellong"

我也试过了str.replaceAll(".*\\W.*" + "hi" + ".*\\W.*", "hello"),我在这里看到了另一个解决方案,但这似乎也不起作用。

实现这一目标的最佳方式是什么,所以我只替换未被其他字母数字字符包围的单词?

2 个答案:

答案 0 :(得分:4)

在这种情况下,Word边界应该很好地为您服务(IMO是更好的解决方案)。更通用的方法是使用负向前瞻和后观:

 String input = "ab, abc, cab";
 String output = input.replaceAll("(?<!\\w)ab(?!\\w)", "xx");
 System.out.println(output); //xx, abc, cab

这将搜索不在其他单词字符之前或之后的出现“ab”。您可以为任何正则表达式换出“\ w”(好吧,由于正则表达式引擎不允许无限制的外观,因此存在实际限制。)

答案 1 :(得分:2)

\\b用于字边界:

String regex = "\\bhi\\b";

如,

  String text = "hi, something";
  String regex = "\\bhi\\b";
  String newString = text.replaceAll(regex, "hello");

  System.out.println(newString);

如果您要做任何数量的正则表达式,请将此Regular Expressions Tutorial作为您最好的朋友。我不能推荐它太高了!