Oppure

Loading
11/11/10 7:49
Neo1986
Buongiorno a tutti!

ho lavorato per più di una settimana con questo comando :

preg_match_all("(<LI>(.*?)</LI>)", $tabella_query_prod_sel[$i]["prod_abstract_it"] , $risultato );


Il problema è questo : se all'interno del tag <LI> ci sono (per chissà quale motivo) dei caratteri di newline, la variabile $risultato risulta vuota... sinceramente penso sia un problema di espressione regolare... dovrei fare in modo che estragga TUTTO e per tutto intendo anche i new line.

Qualsiasi consiglio è ben accetto

Grazie in anticipo
aaa
11/11/10 8:24
BlackMaul
Ciao Neo,

prova a modificare così la regex:
"/(<LI>(.*)<\/LI>)/s"


Es.:
<?php
$a = "
<LI>
<p>aaa</p>
</LI>
";
preg_match("/(<LI>(.*)<\/LI>)/s", $a, $match);
echo $match[0];
?>



Il /s fa in modo (dovrebbe fare in modo....) che il . matchi anche il carattere \n.

Ciao,
Gianluca
aaa
12/11/10 9:33
Il Totem
Il problema è che il punto rappresenta tutti i caratteri TRANNE l'a capo. Quindi se c'è un \n il match fallisce. Per rappresentare proprio tutti i caratteri devi usare l'unione di due classi complementari, ad esempio [\w\W] (tutti i caratteri alfanumerici e tutti quelli non alfanumerici).
Dato che questo match è pericolosamente ampio, ti suggerisco di utilizzare un quantificatore lazy come *?, ossia che catturi il minor numero di caratteri possibile.
aaa