2010-10-01 9 views
7

En PHP, si nous avons besoin de faire correspondre quelque chose comme, ["one","two","three"], nous pourrions utiliser l'expression régulière suivante avec preg_match. En utilisant la parenthèse, nous pouvons également extraire les mots un, deux et trois. Je suis conscient de l'objet Matcher en Java, mais je suis incapable d'obtenir des fonctionnalités similaires; Je suis seulement capable d'extraire la chaîne entière. Comment pourrais-je imiter le comportement preg_match en Java.Fonctionnalité `preg_match_all` de PHP en Java

Répondre

13

Avec un Matcher, pour obtenir les groupes, vous devez utiliser la méthode Matcher.group().

Par exemple:

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 

Rappelez-vous group(0) est la même toute la séquence correspondante.

Example on ideone


Ressources:

0

Je sais que cet article est sorti de 2010, parce que je l'ai juste cherché, peut-être que quelqu'un d'autre en aurait encore besoin. Alors voici la fonction que j'ai créée pour mon besoin.

essentiellement, il remplacera tous les mots clés avec la valeur d'un JSON (ou modèle, ou toute autre source de données)

comment utiliser:

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

-je utiliser ce code dans mon adaptateur partagé.

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

Je suis aussi nouveau pour Java/Android, s'il vous plaît ne hésitez pas à corriger si vous pensez que cela est une mauvaise mise en œuvre ou quelque chose. tks