2010-10-01 11 views
7

W PHP, jeśli musimy dopasować coś takiego, jak ["one","two","three"], możemy użyć następującego wyrażenia regularnego z preg_match.Funkcjonalność PHP `preg_match_all` w Javie

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

Za pomocą nawiasu możemy również wyodrębnić słowa jeden, dwa i trzy. Jestem świadomy obiektu Matcher w Javie, ale nie jestem w stanie uzyskać podobnej funkcjonalności; Jestem w stanie wyodrębnić cały ciąg. W jaki sposób chciałbym naśladować zachowanie preg_match w Javie.

Odpowiedz

13

Z Matcherem, aby uzyskać grupy, należy użyć metody Matcher.group().

Na przykład:

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 

Pamiętaj group(0) jest taka sama cała sekwencja dopasowanie.

Example on ideone


Zasoby:

0

Wiem, że ten post pochodzi z 2010 roku, ale fakt, że właśnie go szukałem, może być kimś innym, również będzie go potrzebować. Oto funkcja, którą stworzyłem dla mojej potrzeby.

zasadzie, zastąpi wszystkie słowa kluczowe z wartością ze json (lub modelu, lub dowolnego źródła danych)

sposób użycia:

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

Używam tego kodu w moim udostępnionym adaptera.

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

Jestem również nowy w Java/Android, prosimy o poprawienie, jeśli uważasz, że jest to złe wdrożenie lub coś. tks

Powiązane problemy