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

Java 如何在搜索诅咒词时将此正则表达式修改为不区分大小写?,java,regex,Java,Regex,此时,此亵渎过滤器查找darn和golly,但不查找darn或golly或darn或golly List<String> bannedWords = Arrays.asList("darn", "golly", "gosh"); StringBuilder re = new StringBuilder(); for (String bannedWord : bannedWords) { if (re.length() > 0) re.append("|

此时,此亵渎过滤器查找
darn
golly
,但不查找
darn
golly
darn
golly

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!]");
List bannedWords=Arrays.asList(“darn”、“golly”、“gosh”);
StringBuilder re=新的StringBuilder();
用于(字符串bannedWord:bannedWords)
{
如果(re.length()>0)
关于附加(“|”);
字符串quotedWord=Pattern.quote(bannedWord);
关于追加(引用词);
}
inputString=inputString.replaceAll(re.toString(),“[请不要咒骂!]”);

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

(?i)
启动表达式

例如,将
re.toString()
更改为
“(?I)”+re.toString()

(?idmsux idmsux)
什么都不做,但会打开/关闭匹配标志
idmsux


其中
i
不区分大小写的
标志。

您需要设置
不区分大小写的
标志,或者只需将
(?i)
添加到正则表达式的开头

StringBuilder re = new StringBuilder("(?i)");
您还需要将条件更改为

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


有关更多信息,请参阅,特别是其中对在java中使用正则表达式给出了一些合理的解释。

使用预编译的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!]");

注意
if(re.length()>0)
条件。。。应该是银或金徽章;-)正则表达式不是查找子字符串的最有效方法。在这种情况下,如果性能很重要,那么您可能还需要了解一些更有效的子字符串匹配算法,以避免再次犯错误。