Foros del Web » Programando para Internet » PHP »

Duda con Expresiones Regulares

Estas en el tema de Duda con Expresiones Regulares en el foro de PHP en Foros del Web. Hola a tod@s. Tengo una duda con expresiones regulares. Supongamos que tengo una expresión regular cualquiera y quiero aplicar la misma expresión pero solo con ...
  #1 (permalink)  
Antiguo 16/09/2008, 19:05
 
Fecha de Ingreso: junio-2008
Mensajes: 71
Antigüedad: 15 años, 9 meses
Puntos: 0
Duda con Expresiones Regulares

Hola a tod@s.

Tengo una duda con expresiones regulares.

Supongamos que tengo una expresión regular cualquiera y quiero aplicar la misma expresión pero solo con un pequeño cambio.

Creo que con ejemplo se verá mejor. (Esta expresión regular me la copié de software prefabricado y la coloco solo como ejemplo):

Código PHP:
        preg_match_all('~\[img(\s+width=\d+)?(\s+height=\d+)?(\s+width=\d+)?\](.+?)\[/img\]~is'$message$matchesPREG_PATTERN_ORDER); 
Eso se aplica a img y ¿que tal si quiero aplicárselo a más cosas?. Supongan que quiero aplicar eso mismo, pero para embed.

Podría hacerlo dos veces

Código PHP:
        preg_match_all('~\[img(\s+width=\d+)?(\s+height=\d+)?(\s+width=\d+)?\](.+?)\[/img\]~is'$message$matchesPREG_PATTERN_ORDER);

        
preg_match_all('~\[embed(\s+width=\d+)?(\s+height=\d+)?(\s+width=\d+)?\](.+?)\[/embed\]~is'$message$matchesPREG_PATTERN_ORDER); 
Me parece que así haría el trabajo, pero creo que es una tontería duplicar la función en lugar de "jugar" con la expresión. Y este es el punto que no tengo la "certeza" de como jugar con ella.

Hasta ahora creo que así es como me conviene para lo que busco.

Código PHP:
        preg_match_all('~\[(?:img|embed)(\s+width=\d+)?(\s+height=\d+)?(\s+width=\d+)?\](.+?)\[/(?:img|embed)\]~is'$message$matchesPREG_PATTERN_ORDER); 
¿Estoy bien? ¿esa mecánica me sirve para el futuro sea la expresión que sea?

Ojalá me respondan, porque en esto es donde ando más en blanco y sin guia. Casi sin importar lo que leo quedo igual

Gracias adelantadas.
  #2 (permalink)  
Antiguo 16/09/2008, 20:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda con Expresiones Regulares

En todo tienes razón, sobre todo... debes aprender a jugar con las expresiones, en ves de pedir permiso....

en tu expresión, cancelas la captura con (?:foo|bar) pero, esto puede ser util.... pero hay casos donde es un arma de doble filo, pudiéndote capturar

Código:
[img]fooBAR[/embed]
mira, ya lo has logrado agrupándolas como opciones, pero esto lleva un problema... que si bien puede localizar estas opciones, al final... puede no acertar en las parejas de estas etiquetas... (hemos usado la captura \\1, ya que contiene la palabra del grupo de opciones.... haciendo coincidir el patrón)

la idea es esta
Código:
/\[(tag|foo|bar)\](.+?)\[\/\\1\]/
de modo, que busca cualquier [tag[foo[bar]]] ... [/tag[/foo[/bar]]] respetando su etiqueta de apertura, y coincidiendo solamente en las parejas.... (espero que se entienda)

suerte!


PDTA: no olvides googlear y leer algunas referencias y documentación de regex (expresiones regulares)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/09/2008, 20:22
 
Fecha de Ingreso: junio-2008
Mensajes: 71
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Duda con Expresiones Regulares

Muchas gracias, me da alivio saber que no ando por mal camino.

Si, creeme que googleado y tengo casi 8 marcadores bastante buenos XD donde por lo menos explican lo básico, y por lo menos haciendo cosas sencillas no me va tan mal.

Pero ya con estructuras un poco grandes, y al querer hacer "malabares" con la expresión, es donde lamentablemente creo que con libros, google, y autodidaccia no es suficiente y hoy se me ha ocurrido venir a pedir a ayuda con quienes saben .

Incluso no he logrado entender del todo que hace exactamente esa expresión y lo mismo me ocurre cuando he querido entender ejemplos de expresiones que son usadas en "la vida real".

Y sobre ese último detalle que has explicado (el problema del cierre de las etiquetas) si lo he entendido, lo que no he entendido es en que lugar va o sustituyendo a que .

Bueno, de verdad te agradezco, no solo por la información que es justo lo que necesitaba, sino también por la rapidez


Edito: "Creo" que ya he entendido pero tengo la duda. Es que al final he puesto [/(?:img|embed)\] y quizás debería ser [/(?:embed|img)\]

¿?

No llego a estar seguro :/

PD 2: y me llego a dar cuenta que en ningún manual que tengo me sale lo que es ~\ y ~is, deduzco que es un delimitador de comienzo y fin, pero no se que más hará.

Última edición por SebasSebas; 16/09/2008 a las 21:02
  #4 (permalink)  
Antiguo 17/09/2008, 00:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda con Expresiones Regulares

Otra ves tienes la razón, ya que las expresiones necesitan algún delimitador... los restantes, son modificadores (puedes revisar el manual)

Entonces, también... no te debes preocupar por el orden de los (?:foo|bar|etc) ya que aunque se comparan uno por uno, pueden no coincidir bien... no importa el orden aquí.

suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
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:38.