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