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 ;)

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.