2011-10-05 4 views
12

मुझे अपनी सरणी में तारों से मिलान करने की आवश्यकता है जो "केबी" स्ट्रिंग से शुरू नहीं हो रहे हैं। मैं इसमामले को अनदेखा करने में नियमित अभिव्यक्ति के साथ मिलान तार

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

एक regex कि कुछ भी नहीं से मेल खाता है KB के साथ शुरू होता है:

^(?!KB).* 

जावा में ऐसा करने के लिए:

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

मैं सब कुछ के लिए RegEx का उपयोग नहीं करता।

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

सर्वोत्तम उत्तर मैंने आज पढ़ा है। –

+0

आह, तुमने मुझे मार दिया। +1 –

+0

क्योंकि यह केवल केबी नहीं हो सकता है और जटिल अभिव्यक्ति हो सकता है, क्योंकि अब मुझे इसकी आवश्यकता है :) –

5

आप regexes हर जगह उपयोग नहीं करना चाहिए। बस एक साधारण जांच बनाएँ:

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

और मुझे लगता है, कि इस विधि (है कि प्रदर्शन नहीं आपके मामले में की जरूरत है) भी performace में बेहतर है:

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

क्या इस दूसरे के अन्य लोगों काम करते हैं काम करने का तरीका?

+0

नहीं, मुझे इसे रेगेक्स के साथ चाहिए :) यह केवल एक साधारण उदाहरण है जो कि स्ट्रिंग्स से मेल नहीं खाता है जो कि केबी –

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

आपके प्रश्न के तरीके से, मुझे पूरी तरह से यकीन नहीं है कि आप मैच असंवेदनशील होना चाहते हैं या नहीं। यह regex:

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

केस संवेदनशीलता को बंद करने के लिए ध्वज (? I) का उपयोग करता है, और आपको चाहिए कि आप चाहते हैं।

+2

से शुरू हो रहा है, ईमानदारी से मुझे लगता है कि यह सही जवाब है - मुझे लगता है कि सवाल यह है कि आप कैसे समझते हैं मामले – user1172468

+0

को अनदेखा करने के लिए आरई इंजन यह सही जवाब नहीं है। आपका पैटर्न aw234 या vj2345 जैसी स्ट्रिंग से मेल नहीं खाएगा – VHS

3

असंवेदनशील मैचों के मामले में regex (?i)^(?!kb).* का उपयोग करें। यह KB234 Kb * 432, केबी 2343 और केबी 23445 से बच जाएगा।

संबंधित मुद्दे