Foros del Web » Programación para mayores de 30 ;) » Java »

Expresiones regulares

Estas en el tema de Expresiones regulares en el foro de Java en Foros del Web. Hola javeros, Estoy haciendo un programilla que necesita hacer uso de las expresiones regulares. Como vengo del mundo peachepero, la primera versión funcional del programa ...
  #1 (permalink)  
Antiguo 09/08/2007, 19:03
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Expresiones regulares

Hola javeros,
Estoy haciendo un programilla que necesita hacer uso de las expresiones regulares.

Como vengo del mundo peachepero, la primera versión funcional del programa estaba en PHP, y pude obtener todas las coincidencias del patrón en la cadena con preg_match_all. Pero no encuentro una función equivalente en Java.

Sé que están las clases Pattern y Matcher, pero no doy con la tecla.

Matcher.matches() solo devuelve un booleano.
String.split("patrón") me divide la cadena, pero me devuelve lo que NO quiero
StringTokenizer fue una sugerencia que me hicieron, pero en la API dice que está depreciada (hice la traducción de deprecate en wordreference.com, y me salió esto, no me suena muy correcto, pero va...)

Lo último que pude ver fueron los métodos group() y groupCount(), creo que es lo que necesito (algo que me devuelva las coincidencias del patrón) pero no lo puedo probar ahora en esta computadora.

¿alguien sabe de algún buen tutorial o artículo sobre esto? no importa si está en inglés, pero sí es importante que no sea muy "para novatos", ya que creo dominar las expresiones regulares, además de que todos los manuales "para novatos" que encontré no me ayudaron...

En fin, sé que alguno de ustedes tendrá una respuesta para mí


Saludos.
  #2 (permalink)  
Antiguo 10/08/2007, 05:51
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Expresiones regulares

http://java.sun.com/docs/books/tutor...sential/regex/

http://www.regular-expressions.info/java.html

Y si aun no te basta...
http://www.google.com/search?q=java+regular+expressions

No se PHP y no se lo que hace "preg_match_all", así que no puedo decirte la equivalencia.

S!
  #3 (permalink)  
Antiguo 10/08/2007, 19:48
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresiones regulares

Está bien, mal yo por no poner un ejemplo de lo que quiero.
Te agradezco la respuesta, te cuento que ya busqué mucho y vi los dos primeros enlaces que me pasaste, pero realmente yo soy más un tipo de ejemplos y a veces la teoría no me ayuda. Estoy seguro de que lo que busco es una combinación de lo que aparece en esos enlaces, pero necesito verlo "unido", si es posible.

Voy al ejemplo:

Tengo esta cadena:
cadena = "<option value=\"cadena1\">Valor1</option> <option value=\"cadena2\">Valor2</option><option value=\"cadena3\">Valor3</option>";

Y quiero pasarle una función/clase/método/lo que sea que, usando un patrón, me devuelva las coincidencias con el patrón.

El patrón es

<option value="([^"])*"

(es decir, devolver todo lo que esté luego de <option value=" y antes de una comilla.)

Lo que hago con preg_match_all en PHP es pasarle la cadena y el patrón, y la función me devuelve (entre otras cosas) lo que encontró. En este caso me devuelve una matriz cuyas entradas son "cadena1", "cadena2" y "cadena3".

La diferencia principal entre esto y matches() es que matches() toma TODA la cadena y la compara con el patrón, devolviendo falso o verdadero según el caso.

Espero haberme explicado mejor, igual de todas formas ahora sí tengo algo de tiempo y voy a hacer algunas pruebas con group() y groupCount()


Saludos.
  #4 (permalink)  
Antiguo 11/08/2007, 05:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Expresiones regulares

Ah, ok. Entonces básicamente necesitas hacer un bucle recuperando group(i) desde 1 hasta groupCount().

matches() como tu dices, te dice si toda la cadena de entrada concuerda con tu expresion regular, lo cual es útil para otras cosas pero no es tu caso.

En Java, en vez de devolverte el array te dice cuantas coincidencias hay, groupCount(), y te permite recuperarlas una a una, group(i) .

S!
  #5 (permalink)  
Antiguo 11/08/2007, 11:12
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresiones regulares

Perfecto, era la confirmación que necesitaba


Saludos y gracias
  #6 (permalink)  
Antiguo 11/08/2007, 11:58
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresiones regulares

Bueno, finalmente encontré lo que necesitaba, les cuento:

Código:
String cadena = "<option value=\"cadena1\">Valor1</option> <option value=\"cadena2\">Valor2</option><option value=\"cadena3\">Valor3</option>";
Matcher m = Pattern.compile("<option value=\"([^\"]*)\"").matcher(cadena);
		
while(m.find())
{
	System.out.println(m.group(1));
}
find() encuentra la próxima coincidencia del patrón en la cadena.
En la coincidencia, se crean los group(), group(0) es la coincidencia completa y luego cada group(n) corresponde al n-ésimo juego de paréntesis. Por eso group(1) me devuelve lo que yo quería, lo que está dentro de las comillas en el patrón.


Gracias GreenEyed por la ayuda.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:36.