? -> coincide con el carácter que esté en esa posición
* -> coincide con el/los caracteres que estén en principio, dentro o al final y justo antes del carácter siguiente
Using perl Syntax Highlighting
- my $cadena = 'bb??vt*u'; #aqui la formula equivale a n+1 = 'u'
- my $cadena2 = "bbazvteeeeeeeertyXdfu";
- for (my $y = length($cadena2),$x = 0;$x<=$y;$x++) {
- if (substr($cadena2,$x,1)) {
- switch (my $a = substr($cadena,$x,1)) {
- case '?' {
- #print "caracter " . substr($cadena2,index($cadena,'?',$x),1) . "\n";
- $strcpy+=substr($cadena2,index($cadena,'?',$x),1);
- }
- case '*' {
- $posicion = index($cadena,'*',1);
- if (my $ps = substr($cadena,$posicion+1,1)) {
- $xx=0;
- while (substr($cadena2,$posicion+$xx,1) ne $ps) {
- $strcpy.=substr($cadena2,$posicion+$xx,1);
- $xx++;
- }
- print "capturado: $strcpy\n";
- }
- }
- else {
- if (uc(substr($cadena2,$x,1)) eq uc(substr($cadena,$x,1))) {
- $strcpy+=substr($cadena2,$x,1);
- }
- }
- }
- }
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Pero tiene un fallo: si encuentra un carácter igual al que está justo después de '*' (en este caso, 'u') la comprobación se detiene. Por ejemplo si $cadena2 tuviese como valor "bbazvteeeeueeeertyXdfu".
¿Cómo podría hacerse mejor? ¿O estoy "reinventando la rueda"?