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 .
Ver post
Comentar
Toad#1 hace 1488 días
Nkieto#2 hace 1487 días
Tuxiradical#3 hace 1487 días
De esta forma yo lo he conseguido hacer ;)
Saludos.
Hermann#4 hace 1487 días
Muy buen artículo.
IceBeat#5 hace 1487 días
Jordi#6 hace 1487 días
IceBeat#7 hace 1485 días
Fede#8 hace 1483 días
IceBeat#9 hace 1483 días
amor sin lucha#10 hace 1240 días
Por su (l) has hecho cosas que jamas harias por mi, las mismas que yo como un tonto hice por ti#11 hace 950 días
vetino#12 hace 768 días