Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/01/2016, 18:45
matake
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: comparacion de cadenas

Muchas gracias por responder dándome muy buena pista.

Lo que pasa es que los regexp no los domino tanto asi que he construido un algoritmo en php que me resuelve la cosa ... incluso lo he complicado mas

Seguro que con expresiones regulares queda mucho mas elegante pero solo se un poquito basico de ellas.

Aqui va mi solucion ( mas primitiva creo ... pero funciona )

Código PHP:
Ver original
  1. $x = array(//pajar
  2.     "A,B,C,D",
  3.     ".A,B,C,D",
  4.     ".A.B,C,D",
  5.     ".A,B.C,D",
  6.     ".A,B,C.D",
  7.     "A.B,C,D",
  8.     ".A.B.C,D",
  9.     ".A.B.C.D"
  10. );
  11.  
  12. $y = array(//aguja
  13.     "A,B",
  14.     ".A,B",
  15.     "B,C",
  16.     "B.C",
  17.     "C,D",
  18.     ".C,D",
  19.     "A,B,C",
  20.     ".A,B,C",
  21.     "A,B.C",
  22.     "B,C,D",
  23.     "B.C,D"
  24. );
  25.  
  26. foreach($x as $pajar){
  27.     foreach($y as $aguja){
  28.         //Busca primero la posicion de aguja en el pajar
  29.         $posicion = strpos($pajar,$aguja);
  30.         // si la coincidencia esta al principio, aunque tenga punto delante o no, siempre sera true
  31.         if($posicion === 0){
  32.             echo $aguja." true ".$pajar."<br>";
  33.         //si hay coincidencia pero no al principio
  34.         }elseif($posicion !== false){
  35.             //si la aguja tiene un punto (donde sea ) siempre sera true
  36.             if(strpos($aguja,".") !== false){
  37.                 echo $aguja." true ".$pajar."<br>";
  38.             //si aguja no tiene punto
  39.             }else{
  40.                 //si el caracter delante de la posicion de la coincidencia es punto,
  41.                 //siempre sera false puesto que la aguja no tiene punto
  42.                 if($pajar[$posicion - 1] === "."){
  43.                     echo $aguja." false ".$pajar."<br>";
  44.                 }
  45.             }
  46.         //por logica si no hai coincidencia siempre sera false
  47.         }else{
  48.             echo $aguja." false ".$pajar."<br>";
  49.         }
  50.     }
  51. }

Si alguien tiene tiempo de traducirla en expresiones regulares estaría curioso como saldria

Gracias