View Full Version : [PHP][Newbie] uso di split con espressioni regolari
ciao a tutti, sto cercando di splittare un array di stringhe costruite così:
<percorso>t3.mp3<\percorso>
dovrei ottenere semplicemente t3.mp3, ma non riesco a usare lo split per dirgli cosa deve fare....sapete suggerirmi? grazie mille :)
wingman87
29-08-2008, 23:57
Ciao, non mastico il php ma posso dirti che l'espressione regolare che ti serve dovrebbe essere "<.*?>"
Spero di esserti stato di aiuto, buonanotte!
split non è la funzione giusta, usa preg_match:
$matches = array();
preg_match("#<percorso>([^<]+)</percorso>#i", $stringa_da_matchare, $matches);
$mp3 = $matches[1];
ok grazie a entrambi :-) proverò con entrambe le soluzione gracias!
mmh...usando preg_match ho qualche problemino...ti posto una sezione un pò + completa del codice, forse ho scritto qualche cavolata per cui meglio se chi se ne intende ci da un'occhiata :-)
//ho un array $contenuto che contiene n righe di testo, lo scorro in un ciclo for e se in una riga trovo la parola 'percorso' allora devo prendere il contenuto di questa riga e splittarlo in modo che partendo da questo:
<percorso>t3.mp3<\percorso> //contenuto riga
io ottenga questo:
t3.mp3 //contenuto $buffer
preg_match dovrebbe salvare in $buffer la stringa "t3.mp3" e successivamente stamparla a video..solo che mi da errori che capisco poco..e poi non ho capito se $buffer deve essere un array oppure no...mmm help!
if(strstr ($contenuto[$g],'percorso')==TRUE){
preg_match("#<percorso>([^<]+)<\percorso>#i", $contenuto[$g], $buffer);
echo $buffer[1];
Ho capito qual'è l'errore (posta anche quelli la prossima volta): di solito i tag si chiudono con la slash (/) e non con la backslash (\), in quest'ultimo caso bisogna escaparla con un'altra backslash (\\) per evitare che il motore dell'espressione regolare cerchi di interpretarla (\p deve essere un carattere speciale delle espressioni regolari), prova con:
preg_match("#<percorso>([^<]+)<\\percorso>#i", $contenuto[$g], $buffer);
E sì, buffer è un array :)
mmm..ti ringrazio per la pazienza e le correzioni ma ancora non funziona , l'errore è sempre li nella sintassi di preg_match cioé:
Warning: preg_match() [function.preg-match]: Compilation failed: unknown property name after \P or \p at offset 20 in C:\Program Files (x86)\EasyPHP 2.0b1\www\Joomla\modules\mod_test\mod_test.php on line 179
che immagino sia proprio la barra \, qualche idea? thanks! :-)
:wtf:
prova ad escaparlo due volte:
<?
preg_match("#<percorso>([^<]+)<\\\\percorso>#i", "<percorso>t3.mp3<\\percorso>", $matches);
print_r($matches);
?>
grandissimo!!! idolo funziona adesso! :-D....non ho capito perchè devo mettere tutte queste sequenze di escape, cmq ho visto che funziona sia con \\\\ che con \\\...ma data la mia ignoranza non so il perchè!...grazie mille!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.