Newsgroup: it.comp.www.php
Titolo: Aiuto, sto per picconare il computer

ho questa stringa ....
$accounts = "*ciao*ciao2*ciao3*ciao4*";
sto cercando disperatamente di estrarre i vari valori contenuti tra gli
asterischi, con :
preg_match_all("/\*(.*)\*/", $accounts,$output);
ma $output[0] non contiene quello che voglio ....
tantomeno $output[1] ...
aiutatemi please.
p.s
probabilmente l'espressione regolare è sbagliata ...
ma anche nel caso fosse giusta,
i valori così estratti, li troverei loopando con un "foreach" od un "for" su
$output[0] ??
oppure $output[1] .....
oppure $output[0][1] , $output[0][2] , ecc.
.... insomma, aiutoooooo :-(
ho bisogno sia dell'espressione regolare, sia del codice che
mi visualizzi i valori così estratti !
che casino !
per favore, non datemi il link del manuale PHP che l'ho
già letto 32 volte e non ci capisco una mazza.

 gli asterischi
$ciao = substr ($ciao, 1, strlen ($ciao) -1); // elimino primo ed
ultimo
// asterisco
$pieces = explode("*", $ciao); 
-- 
I'am what I'am, I do what I can

 $pieces = explode("*", $ciao);
grazie dell'aiuto, ma mi dispiace, non ho specificato che purtroppo $ciao
conterrà altre parti di testo (prima e dopo) le parti che voglio estrarre
...
tipo
$ciao = "blahblahblah*ciao*ciao2*ciao3*blahblahblah"
perciò ho bisogno proprio di un espressione regolare
che mi estrapoli i valori tra gli asterischi a prescindere di dove tali
valori si trovano all'interno della stringa.
sorry

 tantomeno $output[1] ...
.. e che ne dici di un semplice
$output = explode("*",$accounts);
? dovresti solo stare attenta alle stringhe vuote (la prima e l'ultima)
Cmq per vedere cosa contiene una variabile ti consiglio di usare
print_r($var). Molto utile in questi casi.
Ho provato a modificare la regexp e sono arrivato a questo:
preg_match_all("([a-z0-9]+)", $accounts,$output);
$output[0][0] = "ciao";
$output[0][1] = "ciao2";
$output[0][2] = "ciao3";
$output[0][3] = "ciao4";
Ludovico

 $ciao = "blahblahblah*ciao*ciao2*ciao3*blahblahblah"
Secondo me la explode è perfetta...
Poi fai un count del risultato, la prima e l'ultima stringa sono quelle che
non ti interessano, quelle in mezzo sono quelle giuste.

 preg_match_all("/\*(.*)\*/", $accounts,$output);
<?php
$accounts = "*ciao*ciao2*ciao3*ciao4*";
preg_match_all("/\*(.*)(?=\*)/U", $accounts,$output);
// risultati prima parentesi in $output[1], 
// in output [0] si trova il match su tutta la expression
for ($i=0; $i < count($output[1]); $i++)
    echo $output[1][$i];
?>
 
Spiego la regexp:
/\*(.*)(?=\*)/U
trova \*
trova testo seguente (.*)
vai a vedere se in avanti (positive assertion nel manuale) (?=\*)
c'e un asterisco (qui stava il tuo problema).
Prendi il risultato minore (modificatore U) /U
La assertion e' importante in questo caso perche' lo stesso oggetto
determina sia inizio sia fine della ricerca, e quindi non deve essere
incluso nel risultato (il puntatore interno non viene spostato sul
elemento assertion ma rimane sul ultimo elemento trovato (.*).
Chiaro? ;-)

grazie 1000 a tutti ... siete stati molto gentili !
in particolar modo a te Jurgen, sei stato fantastico !!!
era ESATTAMENTE ciň di cui avevo bisogno ...
per non parlare  dell' **utilissimo** tutorial che mi hai fatto !
__________________
thanks !
bye , un bacetto a tutti.

 asterischi, con :
$acca_esplosi=explode("*",$accounts);
ciao
Alesi_27