PDA

View Full Version : [PHP + RegEx] Estrarre tutte le sottostringhe comprese tra "<!--" E "-->"


ToO_SeXy
25-11-2009, 13:15
Ciao a tutti

devo estrarre da una stringa HTML tutti i commenti

quindi devo estrapolare tutte le sottostringhe che iniziano con "<!--" e finiscono con "-->".

ho già provato a programmare varie regexp ma ancora non sono riuscito nel mio intento.

mi date una mano? :)

SerMagnus
26-11-2009, 08:49
così su due piedi mi verrebbe da usare questo pattern

/<!--(.*)-->/


ma nn ti assicuro niente.. :P anzi fammi sapere se l'ho azzaccato :asd:

flx2000
26-11-2009, 09:43
Puoi fare così:

preg_match_all("/<!--[^(-->)]*-->/",$stringa_html,$res);

In $res hai tutto quello che ti occorre. Puoi verificarlo con print_r($res);

ToO_SeXy
27-11-2009, 13:26
così su due piedi mi verrebbe da usare questo pattern

/<!--(.*)-->/


ma nn ti assicuro niente.. :P anzi fammi sapere se l'ho azzaccato :asd:

Puoi fare così:

preg_match_all("/<!--[^(-->)]*-->/",$stringa_html,$res);

In $res hai tutto quello che ti occorre. Puoi verificarlo con print_r($res);

Funzionano entrambe ma non ottengo ciò che voglio.
l'array risultante é formattato cosi

Array =>
(
[0] => Array
(
[0] => <!-- Prova --><!-- Ciao --><!-- Bau -->
)
)


mentre mi occorrerebbe un array tipo questo:

Array =>
(
[0] => Prova
[1] => Ciao
[2] => Bau
)


PS: lo stesso vostro risultato può essere ottenuto con questa regexp + contenuta
/<!--.*-->/

Ciao e grazie delle risposte :)

astorcas
27-11-2009, 14:28
Credo tu abbia bisogno dei lookahead e lookbehind:

uina cosa tipo
(?<=\<!-- )[\w]*(?= --\>)

potrebbe bastare

flx2000
27-11-2009, 17:07
Nel tuo post avevi chiesto le stringe che iniziano per <!-- e finiscono per -->, e quello fa la regex che ho scritto.
Se vuoi solo il testo all'interno dei tag, devi usare:

preg_match_all("/<!--([^(-->)]*)-->/",$stringa_html,$res);

Puoi verificare l'output con:

print_r($res[1]);