如何执行不区分大小写的模式搜索和保留大小写的替换?

Posted

技术标签:

【中文标题】如何执行不区分大小写的模式搜索和保留大小写的替换?【英文标题】:How can I perform case-insensitive pattern search and case-preserving replacement? 【发布时间】:2012-02-03 21:45:39 【问题描述】:

这是场景。

String strText = "ABC abc Abc aBC abC aBc ABc AbC";
// Adding a html content to this
String searchText = "abc";
String strFormatted = strText.replaceAll(
    "(?i)" + searchText, 
    "<font color='red'>" + searchText + "</font>");

这会返回一个字符串,其中所有单词都是小写的,当然也是红色的。 我的要求是将strFormatted 作为一个字符串,其大小写与原始字符串相同,但它应该具有字体标签。

这样可以吗?

【问题讨论】:

这里,根据您的代码,原始字符串将在strText,格式化后的字符串将在strFormatted 是的,这不是真正的代码。这个是我编的。无论如何,我希望在用字体标签替换后,在 strFormatted 中保留 strText 的情况.. 【参考方案1】:

您可以使用反向引用。比如:

String strFormatted = strText.replaceAll(
    "(?i)(" + searchText + ")", 
    "<font color='red'>$1</font>");

【讨论】:

【参考方案2】:

我想建议使用 ArrayList 的替代方法

String [] strText = "ABC", "abc","Abc", "aBC", "abC", "aBc", "ABc", "AbC";

    ArrayList<String> abc = new ArrayList<String> ();
       for(int j=0;j<8;j++)
        

           if("abc".equalsIgnoreCase(strText[j]))
                  
                      abc.add("<font color='red'>"+strText[j]+"</font>");
                  
        

   String strFormatted = abc.toString();
   System.out.println(strFormatted);

【讨论】:

你为什么会这样建议?表现?可维护性?其他原因?

以上是关于如何执行不区分大小写的模式搜索和保留大小写的替换?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript RegExp(正则表达式) 对象

不区分大小写的搜索和替换为 sed

如何在 Notepad++ 中搜索、替换和保留大小写?

如何使用 less 使用模式修饰符进行不区分大小写的搜索?

如何在不区分大小写的 MySQL 数据库上执行区分大小写的搜索?

如何使用 Sql Server XQuery 搜索不区分大小写的单词?