2010-10-01 3 views
7

में PHP की 'preg_match_all` कार्यक्षमता PHP में अगर हमें ["one","two","three"] जैसे कुछ मिलान करने की आवश्यकता है, तो हम preg_match के साथ निम्न नियमित अभिव्यक्ति का उपयोग कर सकते हैं।जावा

$pattern = "/\[\"(\w+)\",\"(\w+)\",\"(\w+)\"\]/" 

कोष्ठक का उपयोग करके हम भी शब्द एक, दो और तीन निकालने में सक्षम हैं। मुझे जावा में Matcher ऑब्जेक्ट के बारे में पता है, लेकिन मैं समान कार्यक्षमता प्राप्त करने में असमर्थ हूं; मैं केवल पूरी स्ट्रिंग निकालने में सक्षम हूं। जावा में preg_match व्यवहार की नकल करने के बारे में मैं कैसे जाउंगा।

उत्तर

13

मैचर के साथ, समूह प्राप्त करने के लिए आपको Matcher.group() विधि का उपयोग करना होगा।

उदाहरण के लिए:

Pattern p = Pattern.compile("\\[\"(\\w+)\",\"(\\w+)\",\"(\\w+)\"\\]"); 
Matcher m = p.matcher("[\"one\",\"two\",\"three\"]"); 
boolean b = m.matches(); 
System.out.println(m.group(1)); //prints one 

याद रखें group(0) ही पूरे मिलान अनुक्रम है।

Example on ideone


संसाधन:

1

जावा PCRE एक परियोजना है कि सभी php PCRE funcions की एक जावा कार्यान्वयन प्रदान करता है। आप वहां से कुछ विचार प्राप्त कर सकते हैं। परियोजना https://github.com/raimonbosch/java.pcre

0

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

मूल रूप से, यह एक json से मूल्य (या मॉडल, या किसी डेटा स्रोत) वाले सभी कीवर्ड का स्थान ले लेगा

का उपयोग कैसे करें:

JsonObject jsonROw = some_json_object; 
String words = "this is an example. please replace these keywords [id], [name], [address] from database"; 
String newWords = preg_match_all_in_bracket(words, jsonRow); 

मैं अपने साझा अनुकूलक में इस कोड का उपयोग करें।

public static String preg_match_all_in_bracket(String logos, JSONObject row) { 
    String startString="\\[", endString="\\]"; 
    return preg_match_all_in_bracket(logos, row, startString, endString); 
} 
public static String preg_match_all_in_bracket(String logos, JSONObject row, String startString, String endString) { 
    String newLogos = logos, withBracket, noBracket, newValue=""; 
    try { 
     Pattern p = Pattern.compile(startString + "(\\w*)" + endString); 
     Matcher m = p.matcher(logos); 
     while(m.find()) { 
      if(m.groupCount() == 1) { 
       noBracket = m.group(1); 
       if(row.has(noBracket)) { 
        newValue = ifEmptyOrNullDefault(row.getString(noBracket), ""); 
       } 
       if(isEmptyOrNull(newValue)) { 
        //no need to replace 
       } else { 
        withBracket = startString + noBracket + endString; 
        newLogos = newLogos.replaceAll(withBracket, newValue); 
       } 
      } 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return newLogos; 
} 

मैं भी जावा/Android के लिए नया हूँ, अगर आपको लगता है कि यह एक बुरा कार्यान्वयन या कुछ और है सही करने के लिए संकोच न करें। tks