我需要匹配数组中不以"KB"字符串开头的字符串.我试过这个
String[] ar = {"KB_aaa","KB_BBB", "K_CCC", "!KBD", "kb_EEE", "FFFF"};
Pattern p = Pattern.compile("[^(^KB)].*");
for(String str : ar)
{
Matcher m = p.matcher(str);
if(m.matches())
System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)
但它仍然不匹配"K_CCC".谢谢
ada*_*shr 35
我不会将RegEx用于所有事情.
for(String str : ar)
{
if(!str.toUpperCase().startsWith("KB"))
System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*Jon 23
从你的问题措辞的方式来看,我不完全确定你是否希望匹配不区分大小写.这个正则表达式:
(?i)[^k][^b].*
Run Code Online (Sandbox Code Playgroud)
使用标志(?i)来关闭区分大小写,应该想要你想要的.
pal*_*int 10
String[] ar = {"KB_aaa","KB_BBB", "K_CCC", "!KBD", "kb_EEE", "FFFF"};
Pattern p = Pattern.compile("^KB.*", Pattern.CASE_INSENSITIVE);
for(String str : ar)
{
Matcher m = p.matcher(str);
if(!m.matches())
System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)
匹配不以KB开头的任何内容的正则表达式是:
^(?!KB).*
Run Code Online (Sandbox Code Playgroud)
在java中这样做:
if (str.matches("^(?!KB).*$")) ...
Run Code Online (Sandbox Code Playgroud)
你不应该在任何地方使用RegExes.只需创建一个简单的检查:
for (String str : ar)
{
if (!str.toLowerCase().startsWith("kb"))
System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)
我认为,这种方法在性能方面甚至更好(并不是在你的情况下需要性能):
public static boolean accept(String name)
{
if (name.length() < 2) return true;
String sub = name.substring(0, 2);
return !sub.equalsIgnoreCase("KB");
}
Run Code Online (Sandbox Code Playgroud)
这第二种工作方式的其他事情是什么?
归档时间: |
|
查看次数: |
43657 次 |
最近记录: |