2011-10-05 18 views
12

"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" と一致しません。 ありがとう

+1

関連スレッド:http://stackoverflow.com/questions/7659449/jdbc-get-table-list-calling-method-gettables-of-databasemetadata-with-advanced-t – adatapost

答えて

7

キロバイトで始まるものないにマッチする正規表現は次のとおりです。Javaでそれを行うには

^(?!KB).* 

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

私はRegExをすべて使用しません。

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

私が今日読んだベスト回答。 –

+0

ああ、あなたは私にそれを打つ。 +1 –

+0

これはKBだけでなく、複雑な式にすることもできるので、今のところこれが必要です。 –

5

あなたはどこにでも正規表現を使用しないでください。この方法は、性能も中にも優れている(その性能は、あなたのケースで必要とされていない)ことを、

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

この第二の他の事を何だけの簡単なチェックを作成します作業の方法?

+0

いいえ私は正規表現でそれを必要としています:)これは単にKBで始まる文字列と一致しない単純な例です –

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

あなたの質問に言い方を変えても、大文字と小文字を区別しないかどうかはわかりません。この正規表現:

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

フラグを使用して大文字と小文字の区別をオフにすると、あなたが欲しい欲しいん必要があります(私?)。

+2

正直なところ私はこれが正解だと思う - 私は質問が幅広い感覚であると思いますREエンジンがケースを無視する – user1172468

+0

これは正しい答えではありません。あなたのパターンはaw234やvj2345のような文字列とは一致しません – VHS

3

正規表現(?i)^(?!kb).*では、大文字と小文字を区別しない一致を使用します。 KB234 Kb * 432、kB2343、kb23445は避けてください。

関連する問題