PDA

View Full Version : [php] estrapolare un messaggio da una stringa


gaglioppo
10-09-2005, 15:39
ciao amici,

sto guardando le funzioni explode e similari, però nn riesco a trovare
quella che fa al caso mio.
data la stringa:

search?client=opera&rls=it&q=%22scuola+media%22+%22scuola%22+%22dipartimento+fisica%22+-centro+-%22seconda+elementare%22&sourceid=opera&ie=utf-8&oe=utf-8

vorrei catturare da: &q= fino al successivo &

Alla fine dovrei catturare:
"scuola media" (come frase)
"scuola"
"dipartimento fisica"
-centro
-"seconda elementare"

Qualcuno ha idee in merito ?

cionci
10-09-2005, 23:23
Scusa, ma se fai explode con parametro la "&" ?

Poi per ogni stringa ottenuta cerchi nelle prime due lettere "q="...se lo trovi lo togli e poi sostituisci tutti i %22 ed i + con degli spazi... Dopo fai explode sullo spazio...

gaglioppo
10-09-2005, 23:37
ma cosi' otterrei:
"scuola"
"media"
"scuola"
"dipartimento"
"fisica"
"-centro"
"-seconda"
"elementare"
senza quindi considerare le frasi "scuola media" e "-seconda elementare", dove la negazione nega sia "seconda" che "elementare"

Non sono ancora riuscito a trovare una soluzione

cionci
11-09-2005, 10:05
Hai ragione...allora non sostituire %22 con gli spazi, ma sostituisci solo i + con gli spazi...edopo fai explode su %22 e scarta le stringhe formate dai soli spazi..

gaglioppo
11-09-2005, 10:15
e il segno meno (-) come lo gestisco?

%22scuola+media%22+%22scuola%22+%22dipartimento+fisica%22+-centro+-%22seconda+elementare%22

diventa:

%22scuola media%22 %22scuola%22 %22dipartimento fisica%22 -centro -%22seconda elementare%22

che diventa:

scuola media
scuola
dipartimento fisica
-centro -
seconda elementare

e quel meno dopo centro dovrebbe stare con "seconda elementare"

cionci
11-09-2005, 13:04
Quando il - è staccato diventa un problema...credo che ti convenga farti una procedura di scansione carattere per carattere...

Ad esempio:

se trovo un meno:
cerco il primo carattere diverso dallo spazio, se è un %22 (a questo punti ti conviene sostituirlo con un doppio apice) allora la parola è lunga fino al prossimo %22) altrimenti è lunga fino al prossimo spazio...

gaglioppo
11-09-2005, 17:01
uffffffffff
dopo un pomeriggio di fatica ecco il risultato, forse si
può ottimizzare, lo posto affinchè possa servire ai posteri:

SCOPO: dato un url (di google) fare la sintassi e trovare le frasi e le parole cercate considerando anche il segno - (per gli altri caratteri tipo or e simili, mi permetto di tralasciarli).

ESEMPIO: con google cerco:
"manuali di php" -"funzioni asp" metodi funzioni truccchi "risoluzione problemi" -"gatti neri e bianchi"

l'url sarà:
h_t_t_p://w_w_w.google.com/search?hs=U82&hl=it&client=opera&rls=it&q=%22manuali+di+php%22+-%22funzioni+asp%22+metodi+funzioni+truccchi+%22risoluzione+problemi%22+-%22gatti+neri+e+bianchi%22&btnG=Cerca&lr=

il codice realizzato:

<?
$e="http://www.google.com/search?hs=U82&hl=it&client=opera&rls=it&q=%22manuali+di+php%22+-%22funzioni+asp%22+metodi+funzioni+truccchi+%22risoluzione+problemi%22+-%22gatti+neri+e+bianchi%22&btnG=Cerca&lr=";
echo$e;
$t = explode("&q=", $e);
//echo"<br>";
$t2=explode("&", $t[1]);
$x=$t2[0];
$x="*s*".$x;
//echo"<br>x:".$x;
//echo"<br>";
$eq=str_replace("-+", "+-", $x);
$e0=str_replace("-%22", "%22-", $eq);
$e1=str_replace("%22+%22", "*chiusa**aperta*", $e0);
$e2=str_replace("%22+-%22", "*chiusa*-*aperta*", $e1);
$e3=str_replace("-%22", "-*aperta*", $e2);
$e4=str_replace("-%22", "-*aperta*", $e3);
$e5=str_replace("%22+", "*chiusa**s*", $e4);
$e6=str_replace("%22", "*aperta*", $e5);
//echo"<br>";
//echo"<br>e:".$e6;
$e6="*aperta*".$e6;
//echo"<br>";
$t3=explode("*aperta*", $e6);
$dim_t3=0;
$indice1=0;$indice2=0;
$vettore_negativo[]="";
$vettore_positivo[]="";
foreach($t3 as $v) $dim_t3++;
for ($i=0;$i<$dim_t3;$i++){
$ex="*chiusa*".$t3[$i];
$t4=explode("*chiusa*", $ex);
$dim_t4=0;
foreach($t4 as $v) $dim_t4++;
for ($i2=0;$i2<$dim_t4;$i2++){
if($t4[$i2]<>""){
if($t4[$i2]=="*s*"){}
else{

$prefisso = substr($t4[$i2], 0, 3);
if($prefisso=="*s*"){
$puro=str_replace("*s*", "+", $t4[$i2]);
$pulito=explode("+", $puro);
$dim_p=0;
foreach($pulito as $v) $dim_p++;
for ($i3=0;$i3<$dim_p;$i3++)
if($pulito[$i3]<>""){
//echo"<br>w3:".$pulito[$i3];
$pre = substr($pulito[$i3], 0, 1);
if($pre=="-"){
$$pulito[$i3]=str_replace("-", "", $pulito[$i3]);
$vettore_negativo[$indice1]=$pulito[$i3];
$indice1++;
}
else{
$vettore_positivo[$indice2]=$pulito[$i3];
$indice2++;
}
}
}
else{
$puro2=str_replace("+", " ", $t4[$i2]);
//echo"<br>w2:".$puro2;
$pre2 = substr($puro2, 0, 1);
if($pre2=="-"){
$puro2=str_replace("-", "", $puro2);
$vettore_negativo[$indice1]=$puro2;
$indice1++;
}
else{
$vettore_positivo[$indice2]=$puro2;
$indice2++;
}
}

}
}
}

}
echo"<br><br><br><br><br>";
$dim5=0;
foreach($vettore_negativo as $v) $dim5++;
for ($i5=0;$i5<$dim5;$i5++)
echo"<br>VETTORE -:".$vettore_negativo[$i5];
$dim6=0;
foreach($vettore_positivo as $v) $dim6++;
for ($i6=0;$i6<$dim6;$i6++)
echo"<br>VETTORE +:".$vettore_positivo[$i6];

//echo"<br><br><br><br><br>";

?>


RISULTATO (si creano due vettori, uno per le parole positive (richieste) e uno per quelle negative (non volute) ):


VETTORE -:funzioni asp
VETTORE -:gatti neri e bianchi

VETTORE +:manuali di php
VETTORE +:metodi
VETTORE +:funzioni
VETTORE +:truccchi
VETTORE +:risoluzione problemi



saluti all'amico cionci e a tutti i forummisti

cionci
11-09-2005, 20:04
Bravo...mi dispiace di avrti potuto dare poco aiuto... Ciao ;)