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

Problema con alternado de caracteres

Estas en el tema de Problema con alternado de caracteres en el foro de RegExp en Foros del Web. Buenas! :D Ya he leido en mi anterior tema que el foro es relativamente nuevo y tiene pocos seguidores, pero bueno... Ya he mejorado mucho ...
  #1 (permalink)  
Antiguo 29/05/2013, 09:54
Avatar de diego9j  
Fecha de Ingreso: septiembre-2011
Mensajes: 33
Antigüedad: 13 años, 3 meses
Puntos: 2
Problema con alternado de caracteres

Buenas! :D
Ya he leido en mi anterior tema que el foro es relativamente nuevo y tiene pocos seguidores, pero bueno...

Ya he mejorado mucho en este tema, pero hay un detalle que no se me ocurre como hacerlo. Una expresion regular que sea válida para

ababab
abYab
YYYabab

pero no para

aabaa

por ejemplo. Había pensado en ^[(ab)Y]$ pero parece ser que no funciona. Ideas?
  #2 (permalink)  
Antiguo 29/05/2013, 10:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Problema con alternado de caracteres

La mejor forma de explicar lo que buscas es con frases, ya que igualmente la lógica gobierna en las expresiones, algo así:

- Que acepte [ab] en minúsculas
- Que no existan repeticiones de [ab] inmediatamente
- Que permita la [Y] en cualquier posición y con repeticiones

Pienso que esas frases definen muy bien lo que estás buscando, sin embargo no es tan sencillo como parece, lo digo porque para evitar las repeticiones debes usar los grupos para "mirar" hacia adelante y hacia atrás y se puede tornar complejo.

Entonces, siguiendo la regla de que lo más simple debería funcionar y además de que la lógica se puede negar llegamos a esto:
Código PHP:
Ver original
  1. $t = 'ababab abYab YYYabab aabaa';
  2.  
  3. $s = preg_split('/\s+/', $t);
  4.  
  5. $r = '/(a|b)(?=\\1)/';
  6.  
  7. foreach ($s as $z) {
  8.  
  9.     $m = preg_match($r, $z);
  10.     echo "- $z : $m\n";
  11.  
  12. }

Lo cual únicamente hace el matching de la repetición de [ab] con lo cual podemos descartar el ultimo valor "aabaa" negando lo que devuelve preg_match(), que para cuestiones practicas "resuelve" el problema.

Espero que eso te sirva un poco, más tarde hago el ejercicio completo a ver si consigo una expresión que valide todos los casos, a ver si no me vuelvo loco.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/06/2013, 18:11
Avatar de diego9j  
Fecha de Ingreso: septiembre-2011
Mensajes: 33
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Problema con alternado de caracteres

los lookback y lookforward me lian un monton, no acabo de entenderlos, pero bueno. Cuando tenga tiempo me pongo a hacer pruebas con ellos :D

Etiquetas: caracteres
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 13:20.