Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    espressioni regolari e eregi_replace()

    ciao a tutti.

    ho un problema non banale con le espressioni regolari.
    ho l'esigenza di tradurre del codice html molto sporco (generato da word e incollato in un campo di testo) in xml. in alcuni casi è possibile gestire la traduzione con delle semplici str_replace(), mappando i tag html e sostituendoli con i relativi tag xml.

    in altri casi però ho bisogno di tradurre porzioni di testo del tipo

    <font color="blue">testo variabile</font><font color="red">altro testo variabile</font>

    in codice xml del tipo <blu>testo variabile</blu><rosso>altro testo variabile</rosso>

    in questo caso ovviamente non è possibile operare una semplice sostituzione di stringa, in quanto il tag </font> chiude due elementi diversi.
    ho provato a utilizzare le espressioni regolari e eregi_replace() in questo modo, considerando $postedValue come la stringa da tradurre:

    $postedValue = eregi_replace('<font color= "blue">(.+)</font>','&lt;blu&gt;\\1&lt;/blu&gt;',$postedValue);
    $postedValue = eregi_replace('<font color= "red">(.+)</font>','&lt;rosso&gt;\\1&lt;/rosso&gt;',$postedValue);

    il problema con eregi_replace() sembra essere che utilizzando la notazione (.+), il parser va a considerare l'ultimo </font> come quello su cui "fermarsi" inglobando quindi il primo </font> nella (.+)
    c'è un modo per limitare l'eregi_replace() alla prima occorrenza di </font>, anzichè all'ultima?

    spero di non essere stato troppo criptico...

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    E nel caso in cui hai dei tag annidati ?

    codice:
    <font color="blu">
     testo blu
     <font color="rosso">
      testo rosso
     </font>
    </font>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3

    non previsti

    non sono previsti casi di tag annidati, quella in esempio è l'unica situazione che mi devo trovare ad affrontare nella conversione dei dati

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Fino a qualche tempo fa usavo ereg_replace ma adesso preferisco preg_replace.

    Prova questo

    codice:
    <?
    ob_start(); ?>
     <font color="blue"> 
     testo blu  
     </font> 
     <font color="red">  
     testo rosso 
     </font>
    <?
    $contents = ob_get_contents();
    ob_end_clean();
    $pattern = "|(<font[[:space:]]+color=\"(.*)\"[[:space:]]*>)(.*)(<\/font>)|Us";
    //$pattern = "|(<font color=\"(.*)\">)(.*)(<\/font>)|Us";
    print preg_replace($pattern,"<\\2>\\3</\\2>",$contents);
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

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 © 2024 vBulletin Solutions, Inc. All rights reserved.