我试图匹配一个单词(Source Ip),其中每个字母可以是小字母或大写字母,所以我写了一个正则表达式模式,但m.find()即使是正确的匹配我也显示为假...
我的正则表达式模式或我写的方式有错吗?
String word = "Source Ip";
String pattern = "[S|s][O|o][U|u][R|r][C|c][E|e]\\s*[I|i][P|p]";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(word);
System.out.println(m.find());
Run Code Online (Sandbox Code Playgroud)
你可以简单地使用
String pattern = "SOURCE\\s*IP";
Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)
Pattern.CASE_INSENSITIVE 将使匹配大小写不敏感.
您不需要在大写和小写之间交替所有字母(注意,如其他人所述,字符类成语不需要|交替 - 在方括号之间添加它也将与|文字匹配).
您可以Pattern使用Pattern.CASE_INSENSITIVE标志参数化初始化(替代内联用法将(?i)在您的模式表示之前).
例如:
Pattern.compile("(?i)source\\s*ip");
Run Code Online (Sandbox Code Playgroud)
... 要么 ...
Pattern.compile("source\\s*ip", Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)
注意
这里有 Flag API .