a
b
ababaabbb
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
* Has complicado la expresión regular innecesariamente, al poner el '*' en lugar del '+', como te puse yo.
s/((0|1)\2*)/ if (length ($1) > 1) {$2 . '<' . length($1) . '>'} else {$2}/ge;
Cuando pones un '*' estás indicando que buscas por "cero o más" ocurrencias de '0' o '1'. Por eso estás luego obligado a hacer el if(), para saber si el resultado fue mayor que 1 o no. En cambio, poniendo un '+', tenemos la seguridad de que siempre habrá al menos un símbolo, así que la expresión queda
s/((0|1)\2+)/$2 . '<' . length($1) . '>'/ge;
Supón que solo hay un '1'. Entonces el subpatrón (0|1) sí coincide. Ahora sustituimos lo que tenemos en toda la expresión ((0|1)\2+). Sería así: (11+), que quiere decir "busca un '1' seguido por uno o más '1'. Es decir: dos o más '1'. Pero originalmente sólo teníamos uno, así que no se cumple el patrón. Y por eso, cuando se encuentra con solo un '1', no lo modifica.koolik escribiste:El problema con esa expresión es que basta que haya un 1 para que despliegue 1<n>, n cantidad de 1. Y en expresiones del tipo 0101 no se necesitan los <>.
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados