| « Manicura con gato | Y otro gato... » |
Curiosidades de la vida, que jugando con unos preg_match de lo más "inocentes" me he dado de lleno contra un muro infranqueable. Por lo visto el preg_match, y todas las regexp "a lo perl" de php, tienen un problema de saturación de pila por exceso de reentradas en patrones de búsqueda "complejos".
Lo divertido, por llamarlo de alguna forma, es que a simple vista, y hasta con tests básicos, no dan ningún problema... hasta que les llegan más datos de los debidos, en una función a demasiada profundidad, y les da por matar todo el script con un descriptivo Segmentation fault.
Un ejemplo simple podría ser algo como:
preg_match_all(
'/(?:(?!<).)*<table>('.
'<tr>(<td>((?!</td>).)*</td>)*</tr>'.
'(?:(?!<tr>).)*'.
')*'
,$in,$out);
A primera vista podría parecer "algo" enrevesado, pero en principio uno diría que no debería dar (demasiados) problemas. Y claro, no los da, al menos en las pruebas. Lo interesante empieza cuando el script de repente se pone a fallar cuando le da la gana, unas veces aquí, otras allí, unas antes, otras después...
Vamos, que por muy bonito que sea tirar de regexp con sintaxis perl, la verdad es que php no está demasiado preparado para tanta filigrana. Al final acaba siendo más rápido montarse un parser entero usando sólo las nativas ereg, aún a pesar de que su sintaxis sea... digamos... "algo cutre".
| Lun | Mar | Mié | Jue | Vie | Sáb | Dom |
|---|---|---|---|---|---|---|
| << < | > >> | |||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
powered by
+
photos powered by

Nikon Coolpix 7600
+

Nokia 3650
Por cortesía de NokiaGame 2002

Esta obra está bajo una licencia Creative Commons salvo donde se especifique explícitamente otra licencia.