Foros del Web » Programando para Internet » PHP »

Expresion regulares dentro

Estas en el tema de Expresion regulares dentro en el foro de PHP en Foros del Web. Hola y muchas gracias de antemano a todos. Estoy intentando aislar/separar/localizar sub-expresiones regulares dentro de expresiones regulares mas grandes y no lo consigo. Por ejemplo, ...
  #1 (permalink)  
Antiguo 13/12/2011, 03:44
 
Fecha de Ingreso: diciembre-2011
Ubicación: Bilbao
Mensajes: 2
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Expresion regulares dentro

Hola y muchas gracias de antemano a todos.

Estoy intentando aislar/separar/localizar sub-expresiones regulares dentro de expresiones regulares mas grandes y no lo consigo.

Por ejemplo, para la expresion regular:

\(coches\s*(\w{1,}\s*?){0,3}\s*(rojos?|azul(es)?)? |moto(cicleta)?s?|camion((es)?|(azo|cito)s?))\

me gustaria obtener los siguiente resultados:

coches\s*
rojos?
azul(es)?
moto(cicleta)?s?
camion((es)?|(azo|cito)s?

El objetivo es poder aislar estas mini-expresiones para poder traducirlas a otros idiomas.

¿Hay alguna forma de conseguirlo aunque no sea con php?

¿Algun metodo que devuelva las operaciones o trazas que ejecuta el motor de expresiones regulares?

Saludos
Miguel
  #2 (permalink)  
Antiguo 13/12/2011, 04:53
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 12 años, 7 meses
Puntos: 140
Respuesta: Expresion regulares dentro

Mírate preg_match_all, http://php.net/manual/es/function.preg-match-all.php
Te devuelve una array con las coincidencias encontadas según la expresión regular... ahora, si quieres "traducir" esas palabras, a lo mejor te sirve preg_replace() http://www.php.net/manual/es/function.preg-replace.php

Saludos
  #3 (permalink)  
Antiguo 13/12/2011, 05:37
 
Fecha de Ingreso: diciembre-2011
Ubicación: Bilbao
Mensajes: 2
Antigüedad: 12 años, 4 meses
Puntos: 0
Busqueda Respuesta: Expresion regulares dentro

Hola charlyalegret:

Muchas gracias por tu respuesta

Precisamente he intentado utilizar preg_match_all, pero no hay forma de diferenciar las barras de los subpatrones de las del segundo nivel de subpatrones:

Si lo parto por las barras:

\(coches\s*(\w{1,}\s*?){0,3}\s*(rojos?|
azul(es)?)? |
moto(cicleta)?s?|
camion((es)?|
(azo|
cito)s?))\

Estoy buscando algo que me devuelva los grupos de subpatrones recursivamente tal y como creo que hace un motor de expresiones regulares:

Grupo 1:
\(coches\s*(\w{1,}\s*?){0,3}\s*(rojos?|azul(es)?)? |
Grupo 1.1:
coches\s*(\w{1,}\s*?){0,3}\s*
Grupo 1.1.1:
coches\s
Grupo 1.1.2:
coches\s
\w{1,}\s*?){0,3}
Grupo 1.2:
(rojos?|azul(es)?)?
Grupo 1.2.1:
rojos?
Grupo 1.2.1:
azul(es)?
Grupo 2:
moto(cicleta)?s?|
...

Grupo 3:
camion((es)?|(azo|cito)s?))\
...

Es un poco enrevesado...

Etiquetas: expresion, regular, subexpresion
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 23:57.