如何修复以下正则表达式?

How to fix the following RegEx?

我有以下代码。我使用不区分大小写的模式修饰符,因此它会发现任何情况,但我想要的是替换为与模式完全匹配的字符,保持大小写。我该如何解决这个问题?

    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

你必须使用

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

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

您需要使用捕获组。

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

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(""));

结合这些步骤您可以使用(作用相同):

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