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
-
function replaceAccents($s) {
-
$s = preg_replace
-
('/&([a-zA-Z])(uml|acute|grave|circ|tilde|cedil|ring);/', '$1', $s);
-
return $s;
-
}
Y se usaría de la siguiente forma:
-
$texto = 'Este es ún téxto con tíldes y eñes';
-
$texto = replaceAccents($texto);
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:
-
$regex = '&' // Que comience con un &
-
. '([a-zA-Z])' // Que agarre cualquier caracter normal
-
.'(uml' // Las que tengan dos puntos, estilo: ü
-
.'|acute' // Las que tengan tildes, estilo: é
-
.'|grave' // Las que tengan tildes inversas, estilo: è
-
.'|circ' // Las que tengan circunflejo, estilo: ê
-
.'|tilde' // Las que tengan virgulilla, estilo: ñ
-
.'|cedil)' // Las con aro arriba, estilo: å
-
.';' // y que finalmente terminen con punto y coma
-
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
May 22nd, 2007 at 2:57 pm
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