如何在搜索诅咒词时修改此正则表达式不区分大小写?

时间:2011-10-10 19:56:32

标签: java regex

目前,此亵渎过滤器会找到darngolly但不会DarnGollyDARNGOLLY

List<String> bannedWords = Arrays.asList("darn", "golly", "gosh");

StringBuilder re = new StringBuilder();
for (String bannedWord : bannedWords)
{
    if (re.length() > 0)
        re.append("|");
    String quotedWord = Pattern.quote(bannedWord);
    re.append(quotedWord);
}

inputString = inputString.replaceAll(re.toString(), "[No cursing please!]");

如何将其修改为不区分大小写?

3 个答案:

答案 0 :(得分:3)

使用(?i)启动表达式。

即,将re.toString()更改为"(?i)" + re.toString()

来自documentation of Pattern

  

(?idmsux-idmsux)没什么,但是开启了匹配标志i d m s u x - 关闭

其中iCASE_INSENSITIVE标志。

答案 1 :(得分:3)

您需要设置CASE_INSENSITIVE标记,或者只需将(?i)添加到正则表达式的开头。

StringBuilder re = new StringBuilder("(?i)");

您还需要将条件更改为

if (re.length() > 4)

通过@ ratchetFreak的答案设置标志可能是最好的。它允许您的条件保持不变(这更直观),并让您清楚地了解代码中发生了什么。

有关详细信息,请参阅this question,特别是this answer,其中提供了在java中使用正则表达式的一些不错的解释。

答案 2 :(得分:1)

使用预编译的java.util.regex.Pattern

Pattern p = Pattern.compile(re.toString(),Pattern.CASE_INSENSITIVE);//do this only once

inputString = p.matcher(inputString).replaceAll("[No cursing please!]");