在忽略大小写中将字符串与正则表达式匹

Ars*_*yan 13 java regex

我需要匹配数组中不以"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)

  • 这是区分大小写的.我认为他想要一个*不敏感的*匹配. (4认同)

Jon*_*Jon 23

从你的问题措辞的方式来看,我不完全确定你是否希望匹配不区分大小写.这个正则表达式:

(?i)[^k][^b].*
Run Code Online (Sandbox Code Playgroud)

使用标志(?i)来关闭区分大小写,应该想要你想要的.

  • 老实说,我认为这是正确的答案 - 我认为问题是更广泛的,你如何告诉RE引擎忽略案例 (3认同)

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)


Boh*_*ian 7

匹配以KB开头的任何内容的正则表达式是:

^(?!KB).*
Run Code Online (Sandbox Code Playgroud)

在java中这样做:

if (str.matches("^(?!KB).*$")) ...
Run Code Online (Sandbox Code Playgroud)


Mar*_*aux 5

你不应该在任何地方使用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)

这第二种工作方式的其他事情是什么?