2010-10-01 10 views
7

En PHP si tenemos que coincidir con algo así como, ["one","two","three"], podríamos utilizar la siguiente expresión regular con preg_match.PHP `` preg_match_all` funcionalidad en Java

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

Al usar el paréntesis también podemos extraer las palabras una, dos y tres. Conozco el objeto Matcher en Java, pero no puedo obtener una funcionalidad similar; Solo puedo extraer toda la cadena. ¿Cómo voy a imitar el comportamiento de preg_match en Java?

Respuesta

13

Con un Matcher, para obtener los grupos, debe usar el método Matcher.group().

Por ejemplo:

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 

Recuerde group(0) es la misma secuencia coincidente conjunto.

Example on ideone


Recursos:

0

Sé que esta publicación vino de 2010, pero el hecho de que acabo de buscarla, puede ser que alguien más todavía la necesite. Así que aquí está la función que creé para mi necesidad.

básicamente, reemplazará todas las palabras clave con el valor de un JSON (o modelo, o cualquier fuente de datos)

Modo de empleo:

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

utilizo este los códigos en mi adaptador compartido.

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

Yo también soy nuevo en Java/Android, por favor corregir si cree que esto es una mala aplicación o algo así. tks

Cuestiones relacionadas