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

标签 java regex replaceall

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

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

    System.out.println( str );

期望的输出: (Te)n (t)nder (tE)ens

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

最佳答案

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

关于java - 如何修复以下正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31198517/

相关文章:

java - ReplaceAll (""、 "") 删除字符串中空格 ""之后的所有文本?

java - 如何使 .replaceAll(String regex, String replacement) 中的正则表达式对用户输入安全?

java - 是否可以使用 "$1"作为另一个方法的参数并将返回的字符串放在 .replaceAll 中的位置?

html - 如何在 Visual Studio Regex 中捕获任何字符(包括\n)

java - 从 Java 类中提取接口(interface)的自动化方法

java - 在某些输入后停止用户输入?

java - 如何重用 libGDX 中的 Assets ?

regex - 从大文件 (~1G) 中删除模式

r - 在 r 中使用 grep 和非常大的正则表达式向量

java - 尝试从命令行运行 Maven 项目时出错