Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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: 97
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

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.

PM