RegEX ottenere testo tra due tag

  • Creatore Discussione Creatore Discussione marcomg
  • Data di inizio Data di inizio

marcomg

Utente Attivo
19 Nov 2011
204
0
16
Ho cercato in lungo e in largo. Avrei bisogno di ricavare il testo tra due tag ##HEAD## e ##/HEAD##. Ho cercato in lungo e in largo, ma sono solo riuscito a costruire questa espressione regolare
Codice:
/##HEAD##(.*?)##\/HEAD##/
che sì mi raccoglie il testo tra i due tag, ma solo nel caso siano in una singola linea. Come fare se ad esempio si è in questo modo
Codice:
##HEAD##
        testo
        altrotesto
        etc
##/HEAD##
a prendere solo
Codice:
        testo
        altrotesto
        etc
??
 
Ciao, le espressioni regolari non le ho mai digerite, in attesa di una risposta ti posto un alternativa
PHP:
<?php

$stringa = "
##HEAD##
        testo
        altrotesto
        etc
##/HEAD##    
";
$i = "##HEAD##";
$inizio = strpos($stringa, $i);
$inizio += strlen($i);
$f = "##/HEAD##";
$fine = strpos($stringa, $f);
$fine -=strlen($f);
$result = substr($stringa, $inizio,$fine);
echo str_replace("\n", "<br/>", trim($result));
?>
 
Puoi "giocare" con substring togliendo dall'intera stringa la parte che hai già controllato in questo modo:
PHP:
$rest = substr($string, -$fine);
Quindi devi mettere tutto in un ciclo e man mano fai andare avanti a fare i controlli e salvare tutto quello che ti serve in una struttura dati che più desideri o consideri opportuna.
 
Comunque essencomi incaponito sulle RegEx mi sono studiato un manuale e sono riuscito a fare una funzione che fa quello che voglio:
PHP:
private function multilineRegExAlt($input, $tag){
    preg_match_all("/##$tag##(.*?)##\/$tag##/s", $input, $matches);
    return($matches[1]);
}

La funzione vuole il testo da elaborare e il nome del tag (che io ho deciso vada delimitato da ## e ##, ma si può cambiare facilmente) e ritorna un array con tutti i risultati.

Ciao ciao!
 

Discussioni simili