Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    333

    Cercare, leggere e sostituire il testo di un link

    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"><FONT SIZE="-2" FACE="verdana" COLOR="#FF3333">26 marzo
    2011</FONT>
    </a>
    <FONT SIZE="-1" FACE="verdana" COLOR="#FFFFFF">Il
    Frase del giorno</FONT>
    </a>'); document.write('</FONT>');
    document.write('</TD></TR>'); document.write('<TR><TD VALIGN=top>

    ');
    document.write('<TABLE BORDER=0 BGCOLOR="#333399" CELLSPACING=0
    WIDTH=155>'); document.write('<TR><TD WIDTH="100%">

    ');
    document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=1 WIDTH="100%">');
    document.write('<TR><TD VALIGN=top WIDTH="100%" BGCOLOR="#CCCC99">

    ');
    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('');
    document.write('</td></tr><tr><td align="center"><font size=2>Frase da trovare e da sostituire</font> <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">laa frase di oggi
    ...
    </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

    PS
    Non ho usato [code] perchè non è codice ma il cibtenuto di una stringa

  2. #2
    Abbastanza banale, se la struttura è esattamente come l'hai scritta...
    codice:
    preg_match_all( "#\<a(.+?)\>(.+?)\</a\>#is" , $testo, $match );
    $to_change = $match[2];
    preg_match("#\<font(.+?)\>(.+?)\</font\>#is", $to_change[2], $match_second);
    $testo = str_replace($match_second[2], "nuovo testo", $testo);

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    333
    Originariamente inviato da Dascos
    Abbastanza banale, se la struttura è esattamente come l'hai scritta...


    eccellente
    Veramente grazie

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    333
    Originariamente inviato da Dascos
    Prego, per così poco
    allora posso chiederti di più?
    Mi spiegheresti per favore la regexp che hau usato?

    "#\<a(.+?)\>(.+?)\</a\>#is"

    così forse in futuro riesco a farla anch'io
    Grazie

  6. #6
    Originariamente inviato da jomla
    allora posso chiederti di più?
    Mi spiegheresti per favore la regexp che hau usato?

    "#\<a(.+?)\>(.+?)\</a\>#is"

    così forse in futuro riesco a farla anch'io
    Grazie
    Il # serve a indicare che è una regex, in pratica.
    I \ servono per l'escaping dei caratteri speciali.
    (.+?) indica "tutto ciò che è compreso" e lo salvi nella prima variabile che, eventualmente, usi nella parte di replace.
    i indica case insenistive, s significa "stringa" (se ricordo bene)
    Quindi in questo caso significa: tutto ciò che sta tra "<a" e ">" e tutto ciò che sta tra ">" e "</a>"


  7. #7
    Piccola nota: < e > non sono caratteri speciali in una regex, non e' necessario l'escape.

  8. #8
    Giusto, ma spesso le regexp le "mischio" con altre funzioni e il 90% delle volte devo escappare anche quelli.
    Inoltre, la "s" indica che, nella exp, il punto viene considerato "ogni carattere compresi i ritorni a capo", non c'entra nulla con "stringa"

    Le regexp Php seguono i PCRE e non le POSIX, quindi occhio.
    Un utile fonte di informazioni: http://perldoc.perl.org/perlre.html#Regular-Expressions


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.