Como hacer mas legibles las REGEX

Siempre cuando miramos una regex, parece ser una fiesta de ASCII en ácidos. Esta semana, uno de los PHPeros de la lista publicó una función para convertir caracteres latinos a letras comúnes

í,ì,ï -> i
ñ -> n

Esto se hizo con crear la siguiente función

PHP:
  1. function replaceAccents($s) {
  2.     $s = htmlentities($s,0,'UTF-8');
  3.     $s = preg_replace
  4. ('/&([a-zA-Z])(uml|acute|grave|circ|tilde|cedil|ring);/', '$1', $s);
  5.     $s = html_entity_decode($s);
  6.     return $s;
  7. }

Y se usaría de la siguiente forma:

PHP:
  1. $texto = 'Este es ún téxto con tíldes y eñes';
  2. $texto = replaceAccents($texto);
  3. echo $texto; // Escribe: Este es un texto con tildes y enes

la magia la hace al convertir todas las letras a codificación estándar HTML

á -> & a acute ;
é -> & e acute ;
ñ -> & n tilde ;

Si se dan cuenta, solo es de eliminar el & y la parte final... esta magia se hace con hacer una expreción regular y remplazar caracteres. El problema es que siempre vamos a ver las expreciones regulares como algo raro... PERO PODEMOS DOCUMENTAR!

('/&([a-zA-Z])(uml|acute|grave|circ|tilde|cedil|ring);/', '$1', $s) <-- ???

Podemos documentar la expreción regular de la siguiente forma:

PHP:
  1. $regex'&'     // Que comience con un &
  2.         . '([a-zA-Z])'  // Que agarre cualquier caracter normal
  3.         .'(uml'  // Las que tengan dos puntos, estilo:  ü
  4.         .'|acute'      // Las que tengan tildes, estilo:  é
  5.         .'|grave'      // Las que tengan tildes inversas, estilo:  è
  6.         .'|circ'        // Las que tengan circunflejo, estilo:  ê
  7.         .'|tilde'      // Las que tengan virgulilla, estilo:  ñ
  8.         .'|cedil)'    // Las con aro arriba, estilo:  å
  9.         .';'            // y que finalmente terminen con punto y coma
  10.  
  11. $texto = preg_replace('/$regex/', '$1', $texto);

Creo que al tener documentado de esta forma, podemos entender mucho mas fácil y quitarle lo místico a las expreciones regulares. No es de hacer código en la menor cantidad de lineas, es hacer código que todo el mundo pueda entender.

Espero que esto muestre la luz a muchos para saber como documentar regex

One Response to “Como hacer mas legibles las REGEX”

  1. Freddie Says:

    Aaah, las expresiones regulares
    La forma más facil de mantener un empleo si hay peligro de despido porque NADIE podría re-entender el código que escribimos

Leave a Reply