Сопоставить строки с регулярным выражением в случае игнорирования - PullRequest
13 голосов
/ 05 октября 2011

Мне нужно сопоставить строки в моем массиве, которые не начинаются со строки "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".Спасибо

Ответы [ 6 ]

35 голосов
/ 05 октября 2011

Я бы не стал использовать RegEx для всего.

for(String str : ar)
{
    if(!str.toUpperCase().startsWith("KB"))
        System.out.println(str);
}
22 голосов
/ 05 октября 2011

Судя по тому, как сформулирован ваш вопрос, я не совсем уверен, хотите ли вы, чтобы совпадение не учитывало регистр или нет. Это регулярное выражение:

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

использует флаг (? I), чтобы отключить чувствительность к регистру, и должен хотеть, чтобы вы хотели.

10 голосов
/ 05 октября 2011
    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);
    }
7 голосов
/ 05 октября 2011

Регулярное выражение, которое соответствует чему-либо , а не , начиная с КБ:

^(?!KB).*

Чтобы сделать это в Java:

if (str.matches("^(?!KB).*$")) ...
5 голосов
/ 05 октября 2011

Вы не должны использовать 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");
}

Что делают другиечто это за второй способ работы?

3 голосов
/ 22 сентября 2016

Используйте регулярное выражение (?i)^(?!kb).* для совпадений без учета регистра. Это позволит избежать KB234 Kb * 432, kB2343 и kb23445.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...