簡體   English   中英

在忽略大小寫中使用正則表達式匹配字符串

[英]Match strings with regular expression in ignore case

我需要匹配數組中不以“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”。 謝謝

我不會對所有事情都使用 RegEx。

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

從您的問題的措辭來看,我不確定您是否希望匹配不區分大小寫。 這個正則表達式:

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

使用標志 (?i) 關閉區分大小寫,並且應該確實需要。

    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);
    }

匹配任何以 KB 開頭的正則表達式是:

^(?!KB).*

在java中做到這一點:

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

你不應該在任何地方使用 RegEx。 只需創建一個簡單的檢查:

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");
}

其他人對第二種工作方式有何看法?

使用正則表達式(?i)^(?!kb).*進行不區分大小寫的匹配。 它將避免 KB234 Kb*432、kB2343 和 kb23445。

這是可以幫助理解 String.matches 函數忽略大小寫的代碼片段,有關更多詳細信息,請使用此 [link][1]

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.*)"));
 Try 1: false Try 2: true

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM