Newsgroup: it.comp.www.php
Titolo: cercare in una stringa

Ciao a tutti
ho un problema riguardante la ricerca, la lettura e la sostituzione di un 
pezzetto di testo in una stringa.
Con la funzione file_get_contents('') leggo un piccolo file di testo.txt 
contenente alcune righe di codice javascript di cui per esempio il testo di 
oggi è questo:
document.write('<TABLE BORDER=0 BGCOLOR="#333399" CELLSPACING=0 
CELLPADDING=0 WIDTH="155">'); document.write('<TR><TD VALIGN=bottom><P 
ALIGN=center>'); document.write('<a href="
http://www.miostito.it/326
" 
TARGET="_blank"><b><FONT SIZE="-2" FACE="verdana" COLOR="#FF3333">26 marzo 
2011</FONT></b></a><BR><FONT SIZE="-1" FACE="verdana" COLOR="#FFFFFF"><b>Il 
Frase del giorno</FONT></B></a>'); document.write('</FONT>'); 
document.write('</TD></TR>'); document.write('<TR><TD VALIGN=top><P>'); 
document.write('<TABLE BORDER=0 BGCOLOR="#333399" CELLSPACING=0 
WIDTH=155>'); document.write('<TR><TD WIDTH="100%"><P>'); 
document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=1 WIDTH="100%">'); 
document.write('<TR><TD VALIGN=top WIDTH="100%" BGCOLOR="#CCCC99"><P>'); 
document.write('<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2 WIDTH="100%">'); 
document.write('<tr><td align="center" valign="middle" width="150" 
height="150">'); document.write('<A HREF="
http://www.miosito.it/oggigiorno
" 
TARGET="_blank"><img BORDER="0" src="
http://www.miosito.it/00.JPG
"></A>'); 
document.write('</td></tr><tr><td align="center"><font size=2><a 
href="
http://www.miosito.it/00
" TARGET="_blank"><font color="#FF3300" 
size="2">Frase da trovare e da sostituire</font></a> <font 
size="1">Vescovo</font>'); document.write('</td></tr>');
document.write('<tr><td align=right><font size=2 color="#CCCC99"><a 
href="
http://www.miosito.it/326
" TARGET="_blank"><b>i santi di oggi 
...</b></a></font></td></tr>'); document.write('</TABLE>'); 
document.write('</TD></TR></TABLE>'); document.write('</TD></TR></TABLE>'); 
document.write('</TD></TR></TABLE>');
pertanto mi ritrovo tutto questo codice in una variabile stringa
In cui devo cercare , leggere esostituire il testo fra il terzo<a>e il suo 
</a> che nel caso di questo esempio è: Frase da trovare e da sostituire MA 
CHE IO IN REALTà  NON SO MAI COSA CI SIA SCRITTO DI VOLTA IN VOLTA MA SO 
SOLO CHE è IL TESTO DEL TERZO LINK
come fareste?
Grazie 

 ha scritto nel messaggio 
news:Suijp.13154$%g.2...@twister1.libero.it...

Mettiamo che tui hai nella variabile TestoNEW il testo da inserire.
Mettiamo che tui hai nella variabile TestoCORRENTE il testo letto con 
file_get_contents('').
Con un loop scansioni TestoCORRENTE dall'inizio leggendo 3 caratteri alla 
volta, 123 - 234 -345 e così via.
quando incontri il primo <a> incrementi di uno il contenuto di una 
variariable (in pratica conti gli <a>)
quando arrivi al terzo <a> memorizzi la posizione (di inizio), poi continui 
a scorrere la stringa cercando però </a> (4 caratteri).
quando arrivi a </a> memorizzi la posizione (finale) ed esci.
Per esempio esse sono inizio=100 e finale=200, estrai (metti in una 
variabile TestoOLD) il contenuto fra 100 e 200 della stringa di origine. Poi 
sostituisci TestoOLD con testoNEW nella varibile TestoCORRENTE ed il gioco è 
fatto.
Può verificarsi il problema che <a> è scritto <A> oppure < a > eccetera 
(vale anche per </a>), per questo va anallizzato il software che genera la 
stringa o parlato con chi la scrive o scritto qualcosa di apposito per 
gestire le evenienze.
saluti
Ernesto

 gestire le evenienze.
... ma non invecchi di meno se usi UNA regexp ?????????
ciao, f.

ok grazie adesso provo.
Purtroppo non oposso gestire io la maiuscola o la minuscola della A/a dei 
link perchè non li scrivo io e chi lo scrive non sente ragione.
Gli avevo anche chiesto di mettere un id ma.............
La ricerca deve essere insensitiva e non vedo come farla anche perchè spesso 
incontro un <a> e un </A> o vicecversa oppure <a></a>oppure <A></A> oppure 
<A></a>.
Insomma non è mai uguale


Senz'altro si, tu come la scriveresti?
Ernesto

 ciao, f.
Penso di si
Vuoi scriverla tu per favore?
Grazie


Non importa, le puoi gestire cosě: di tutto il letto con 
file_get_contents('') , prima di iniziare il lavoro vero e proprio, 
scorri/estrai dalla stringa un carattere alla volta reinserendolo in una 
nuova stringa in modo da eliminare tutti gli spazi fra <   > e nello stesso 
tempo metti in minuscolo le lettere che ci trovi.
Per il maiuscolo/minuscolo leggi il codice ascii del carattere,  65-90 č 
maiuscolo riscrivendolo +32 lo stesso carattere diventa minuscolo
Ernesto
 


Come da primo post (non mio) il contenuto dovrebbe essere questo:
('<TABLE BORDER=0 BGCOLOR="#333399" CELLSPACING=0
CELLPADDING=0 WIDTH="155">'); document.write('<TR><TD VALIGN=bottom><P
ALIGN=center>'); document.write('<a href="
http://www.miostito.it/326
"
TARGET="_blank"><b><FONT SIZE="-2" FACE="verdana" COLOR="#FF3333">26 marzo
2011</FONT></b></a><BR><FONT SIZE="-1" FACE="verdana" COLOR="#FFFFFF"><b>Il
Frase del giorno</FONT></B></a>'); document.write('</FONT>');
document.write('</TD></TR>'); document.write('<TR><TD VALIGN=top><P>');
document.write('<TABLE BORDER=0 BGCOLOR="#333399" CELLSPACING=0
WIDTH=155>'); document.write('<TR><TD WIDTH="100%"><P>');
document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=1 WIDTH="100%">');
document.write('<TR><TD VALIGN=top WIDTH="100%" BGCOLOR="#CCCC99"><P>');
document.write('<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2 WIDTH="100%">');
document.write('<tr><td align="center" valign="middle" width="150"
height="150">'); document.write('<A HREF="
http://www.miosito.it/oggigiorno
"
TARGET="_blank"><img BORDER="0" src="
http://www.miosito.it/00.JPG
"></A>');
document.write('</td></tr><tr><td align="center"><font size=2><a
href="
http://www.miosito.it/00
" TARGET="_blank"><font color="#FF3300"
size="2">Frase da trovare e da sostituire</font></a> <font
size="1">Vescovo</font>'); document.write('</td></tr>');
document.write('<tr><td align=right><font size=2 color="#CCCC99"><a
href="
http://www.miosito.it/326
" TARGET="_blank"><b>i santi di oggi
...</b></a></font></td></tr>'); document.write('</TABLE>');
document.write('</TD></TR></TABLE>'); document.write('</TD></TR></TABLE>');
document.write('</TD></TR></TABLE>');
Ernesto

 pezzetto di testo in una stringa.
Eccomi.
fermo restando che progetterei diversamente, guardando strettamente il
tuo problema la seguente č una soluzione:
Tieni presente che la frase da cercare deve essere *UNIVOCA* in tutto il
blocco di testo (questo rende il problema piů semplice "lato" regexp),
viceversa le sostituirebbe tutte.
ciao, f.
<?php
    $fileContents=<<<EOF

EOF;
    // IL TESTO NUOVO DA INSERIRE
    $fraseNuovaDaSostituire  =   '___FRASE NUOVA YODA YODA FOO___';
    // Estraggo il contenuto del *TERZO* <a> che incontro, case
insensitive
    $pattern =   '/(<a.*<\/a>.*){2}(<a.*<\/a>)/msiU';
    preg_match( $pattern, $fileContents, $matches );
    $ilTerzoLink = $matches[2];
 
    // Dalla stringa di cui sopra, estraggo il CONTENUTO del tag <font>,
case insensitive:
    $pattern = '/font.*>(.*)<\/font>/msiU';
    preg_match( $pattern, $ilTerzoLink, $matches2 );
 
    // Ho cosě il testo del body del tag <font> del terzo tag <a>
    $fraseDaTrovare =   preg_quote($matches2[1]);
 
    $output = preg_replace( "/$fraseDaTrovare/m",
$fraseNuovaDaSostituire, $fileContents );
 
    print_r($output);
?>

 viceversa le sostituirebbe tutte.
... se cosě non fosse - comunque - senza penar troppo comunque alla
prima regexp in cui determini "il contenuto del terzo tag <a>" ti salvi
anche "tutto quello che c'e' prima" e "tutto quello che c'e' dopo".
Alla fine, invece di usare pre_replace sul testo intero lo fa sul solo
pezzetto che contiene il terszo tag <a> e poi assembli i tre pezzi.
Insisto che progetterei in un altro modo perň.
ciao, f.