Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - preg_match_all - Problema newline
Forum - PHP - preg_match_all - Problema newline

Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 88
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 8:49
Giovedì, 11/11/2010
Buongiorno a tutti!

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

Codice sorgente - presumibilmente Plain Text

  1. 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


Chiedere è lecito, rispondere è cortesia, rompere il caxxx è prassi!
PM
Avatar
BlackMaul (Normal User)
Newbie


Messaggi: 2
Iscritto: 10/11/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 9:24
Giovedì, 11/11/2010
Ciao Neo,

prova a modificare così la regex:
Codice sorgente - presumibilmente Plain Text

  1. "/(<LI>(.*)<\/LI>)/s"



Es.:
Codice sorgente - presumibilmente Plain Text

  1. <?php
  2. $a = "
  3. <LI>
  4. <p>aaa</p>
  5. </LI>
  6. ";
  7. preg_match("/(<LI>(.*)<\/LI>)/s", $a, $match);
  8. echo $match[0];
  9. ?>




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

Ciao,
Gianluca

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 10:33
Venerdì, 12/11/2010
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.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM