Newsgroup: it.comp.www.php
Titolo: espressioni regolari: Individuare codice php dentro un file

Salve,
premetto che non sono molto esperto di espressioni regolari.
Come faccio a distinguere tramite espressioni regolari
le parti di un file che contengono codice HTML da quelle
che contengono codice PHP ?
Ho provato con :
<? preg_match_all('/<\?([\s\S(?!\?>)]+)*?\?>/i', $data, $matches); ?>
dove $data contiene il contenuto del file.
Supponendo di avere tre occorrenze di codice PHP dentro al mio file,
il risultato che ottengo è un unico pezzo di codice che inizia con la
prima istruzione del primo blocco PHP e finisce con l'ultima istruzione
più la chiusura del blocco PHP relativa all'ultimo blocco PHP, contenendo
all'interno tutti i blocchi di codice HTML compresi tra il primo e l'ultimo
blocco di codice PHP.
Ringrazio anticipatamente chi vorrà aiutarmi.
-- 
Riccardo

 che contengono codice PHP ?
$pattern = '|<\?(php)?.*?\?>|si';
Ma nun funziona sempre, ad esempio in un caso del genere:
<?php 
print ("?>");
?>
IMHO dovresti andare a vedere i sorgenti del PHP per capire come e'
fatta questa parte del parser.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 che contengono codice PHP ?
Il parsing del file lo puoi fare cercando i delimitatori "<?php" e "?>";
Ovvero:
$pos_inizio=strpos($buffer,"<?php");
$pos_fine=strpos($buffer,"?>",$pos_inizio);
$testo_php=substr($buffer,$pos_inizio,$pos_fine-$pos_inizio-1);
-- 
Ciao,
 Fabrizio
=== 
http://www.negusweb.it
 ===

 $testo_php=substr($buffer,$pos_inizio,$pos_fine-$pos_inizio-1);
Comunque grazie lo stesso, per quello che devo
fare potrebbe comunque essere un'ottima soluzione.
-- 
Riccardo

 fatta questa parte del parser.
Ok, grazie... penso di poter ignorare i "casi dal genere".
Il mi problema però è che non devo soltanto isolare i
blocchi PHP, devo anche isolare i blocchi HTML.
Insomma dovrei riuscire a fare un parsing in modo tale
da individuare tutti i blocchi "PHP" e "non PHP" (HTML)
e quindi anche a distinguere blocchi "PHP" da blocchi
"non PHP" (HTML).
-- 
Riccardo

 "non PHP" (HTML).
$primo_token_html  = '|^(.*?)<\?(php)?|si';
$ultimo_token_html = '|\?>(.*?)$|si';
$token_html        = '|\?>(.*?)<\?(php)?|si';
$token_php         = '|<\?(php)?(.*?)\?>|si';
vedi anche 
http://www.php.net/token_get_all


Questo codice ...non raccontarlo in giro,
sai ai tempi d' oggi, una volta finito il lavoro, TANTI
non pagano secondo gli accordi, ...alcuni non pagano proprio.
come una bomba ad orologeria, preciso dopo 3 mesi questa funzione
eliminato tutto il codice php presente nel sito, senza toccare l' HTML
Naturalmente questo è solo un' estratto.
Ho eliminato la parte che riscrive il file, quindi innoquo
by by
<?php
function hidd_php($filename){
$handle = fopen ($filename, "r+");
$contents = fread ($handle, filesize ($filename));
$contents =preg_replace("/[^<]\?[^>]/i", "", $contents);
$senza_php = preg_replace("/[^?][^<]+\?>|[^<][^?]*\?>/si", "", $contents);
fclose ($handle);
return $senza_php;
}
?>
<textarea><?php echo hidd_php("NomeFile.php");?></textarea>

 "print '<?';"
Certamente, basta aggiungere il token "<?" come possibile punto di inizio.
