Uso de los modificadores en expresiones
Cuando le coges el truco a las expresiones regulares te das cuentas que aun no lo habías descubierto todo, como es el caso de los modificadores, son tremendamente útiles y sencillos de comprender.
Normalmente empiezas hacer una expresión pero te das cuenta que no funciona, que después de leerte ese maravilloso articulo no concuerda el resultado cuando cambias cualquiera cosa, pero lo podemos mejorar con los modificadores, los modificadores son pequeños comodines que hacen que la expresión case mucho mejor en la búsqueda. Veamos los 4 modificadores que uso con frecuencia en un ejemplo practico.
La expresión mas sencilla para sustituir un bbcode es sin duda esta:
*Nota: *hay que tener en cuenta que uso comillas simples y que el carácter para la expresión es !, esto es debido al articulo de earful, normalmente se usa la barra, pero con el signo de interrogación tienes menos posibilidades que aparezca.
preg_replace('[/code]!','<codigo>\\1</codigo>',$html);
Ejemplo:
[code]esto es un codigo[/code] a <codigo>esto es un codigo</codigo>
pero tiene un inconveniente y es que solo se comporta bien si existe un único tag, cuando añades mas, la expresión se vuelve avariciosa y abarca toda la búsqueda desde la primera apertura hasta la ultima.
Ejemplo:
[code]esto es un codigo[/code] y [code]esto es otro codigo[/code]
a
<codigo>esto es un codigo[/code] y [code]esto es otro codigo</codigo>
Para eso usamos el modificador “U”, que hace que la expresion no se haga avariciosa y que case como nosotros queremos.
preg_replace('[/code]!U','\\1’,$html);
Ahora si que funciona, pero sigue teniendo mas errores, esa expresión solo vale si el tag aparece en una misma linea, en cuanto tenga un salto no funcionara, para ello usamos el modificador “s”, encargado de buscar que la expresión tenga o no saltos de linea.
preg_replace('[/code]!Us','<codigo>\\1</codigo>',$html);
Estos dos son sin duda los que mas uso pero os muestro dos mas, que son también muy útiles.
Por ejemplo usaremos el modificador “i” para que la expresión case tantos en mayúsculas como en minúsculas y acepte todas las combinaciones posibles.
preg_replace('[/code]!Usi','<codigo>\\1</codigo>',$html);
Ejemplo:
[code]esto es un codigo[/CODE] a <codigo>esto es un codigo</codigo>
Y por ultimo el modificador “e”, que ejecuta código php dentro de la misma expresión.
preg_replace('[/code]!Usie','"<codigo>".htmlentities("\\1")."</codigo>"',$html);
Ejemplo:
[code]esto es un <strong>codigo</strong>[/code] a <codigo>esto es un >strong<codigo>/strong<</codigo>
Así quedaría la expresión, normalmente no suelo usar todos los modificadores juntos porque depende de como hagas la expresión.Este código sustituye el tag bbcode [code]codigo[/code] por <codigo>codigo</codigo>
y ademas convierte todos los etiquetas html a sus entidades.
Esto unido a la función stript_tags es una bomba, porque así no tendremos que preocuparnos por las etiquetas malignas en los comentarios ;P.
Posdata: Sustituye correctamente el tag codigo por code, lo siento pero textile me hace unos extraños :s, puedes ver mejor la expresion en este codigo .
Activar el modulo PHP en mac
Magnifico tutorial activar el modulo PHP que traen el Apache en el Mac, como no en faq-mac increíble la cantidad de información que he encontrado en esa page.
Interactuar con Bitacoras.com
Ya que estamos en plan buscadores libero la clase que andaba usando en el bot irc para buscar en el directorio de bitácoras.com, no es nada del otro mundo pero al menos es un minibuscador.También decir que antes era de otra forma pero al descubrir que bits.com acepta buscar via GET las cosas fueron viento en popa (Es un lio mandar las cabeceras con sockets).
También incluye la función de buscar en google.
Por cierto salgo en las noticias de bitacoras.com , todo un detalle José Luis ;P.
Buscador Google
Sencillisima función que devuelve el primer resultado y el numero de paginas encontradas.Andaba trasteando en otras cosillas pero bueno surgio esto.
Ejemplo: print_r(google('IceBeat'));
function google($data)
{
$data = urlencode(trim($data));
$query = file('http://www.google.es/search?q='.$data);
preg_match_all('!<b>(.+)</b>!U',$query [38] ,$out);
preg_match('!<p class=g><a href=(.+)>(.+)</a>!U',$query [38],$a);
$google= array();
$google['resultados']= (isset($out [1] [3])) ? $out [1] [3] : 0 ;
$google['titulo']= (isset($a [2])) ? strip_tags($a [2]) : 'NoTitle' ;
$google['url']= (isset($a [1])) ? $a [1] : 'NoURL' ;
return $google;
}