如何修复以下RegEx?

时间:2015-07-03 04:32:10

标签: java regex replaceall

我有以下一段代码。我使用Case-insensitve模式修饰符,因此它会发现任何事件,但我想要的是替换为与模式匹配的字符,保留大小写。我怎么能解决这个问题?

    String str = "Ten tender tEens";
    String substr = "te";
    str = str.replaceAll("(?i)"+substr, "("+substr+")");

    System.out.println( str );

所需的输出: (Te)n(te)nder(tE)ens

收到的输出: (te)n(te)nder(te)ens

3 个答案:

答案 0 :(得分:1)

你必须使用

str = str.replaceAll("(?i)("+substr+"?)", "($1)");

这将创建一个组并替换该组。

答案 1 :(得分:1)

您需要使用捕获组。

str = str.replaceAll("(?i)("+substr+")", "($1)");

答案 2 :(得分:1)

replaceAll()matcher(string).replaceAll(exp)的工作方式相同: 为了使这项工作更好地理解你可以打破代码:

     String str = "Ten tender tEens";
     Pattern pattern=Pattern.compile("(?i)(te)");
     Matcher matcher=pattern.matcher(str);

     System.out.println(  matcher.replaceAll("$1"));

结合这些步骤,你可以使用(做同样的):

String substr = "te";
str = str.replaceAll("(?i)("+substr+")", "($1)");