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

时间:2011-10-05 11:44:28

标签: 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);
}

但它仍然不匹配“K_CCC”。 感谢

7 个答案:

答案 0 :(得分:35)

我不会将RegEx用于所有事情。

for(String str : ar)
{
    if(!str.toUpperCase().startsWith("KB"))
        System.out.println(str);
}

答案 1 :(得分:22)

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

(?i)[^k][^b].*

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

答案 2 :(得分: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);
    }

答案 3 :(得分:7)

匹配以KB开头的 not 的正则表达式是:

^(?!KB).*

在java中执行此操作:

if (str.matches("^(?!KB).*$")) ...

答案 4 :(得分:5)

你不应该在任何地方使用RegExes。只需创建一个简单的检查:

for (String str : ar)
{
    if (!str.toLowerCase().startsWith("kb"))
        System.out.println(str);
}

而且我认为,这种方法在性能方面表现更好(并非在您的情况下需要性能):

public static boolean accept(String name)
{
    if (name.length() < 2) return true;
    String sub = name.substring(0, 2);
    return !sub.equalsIgnoreCase("KB");
}

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

答案 5 :(得分:3)

使用正则表达式(?i)^(?!kb).*进行不区分大小写的匹配。它将避免KB234 Kb * 432,kB2343和kb23445。

答案 6 :(得分:0)

以下是可帮助您了解String.matches函数忽略大小写的代码段,有关更多详细信息,请使用此[link] [1]

KeyError: "None of [Index are in the [columns]"
String stringToSearch = "Four score and seven years ago our fathers ...";

// this won't work because the pattern is in upper-case
System.out.println("Try 1: " + stringToSearch.matches(".*SEVEN.*"));

// the magic (?i:X) syntax makes this search case-insensitive, so it returns true
System.out.println("Try 2: " + stringToSearch.matches("(?i:.*SEVEN.*)"));

[1]:http://alvinalexander.com/blog/post/java/java-how-case-insensitive-search-string-matches-method/#:~:text=Solution%3A%20Use%20the%20String%20matches,must%20match%20the%20entire%20string.