繁体   English   中英

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

[英]How to modify this regular expression to be case insensitive while searching for curse words?

此刻,此亵渎性过滤器会找到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!]");

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

(?i)开头表达式。

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

Pattern文档中

(?idmsux-idmsux)什么都没有,但是将匹配标志idmsux开启-关闭

其中iCASE_INSENSITIVE标志。

您需要设置CASE_INSENSITIVE标志,或简单地在正则表达式的开头添加(?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!]");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM