Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    144

    Adattare preg_replace()

    Ciao ragazzi,
    vorrei adattare questo codice, che stampa la parola uno

    codice:
    $stringa="uno";
    $tag="b";
    echo preg_replace("/(.*)(\<$tag\>)(.*)(\<\/$tag\>)(.*)/","\\3", $stringa);
    al seguente caso:

    codice:
    $stringa="unodue
    
    tre</p>";
    Vorrei che riuscisse a stampare le parole uno, due, tre magari mettendole in un array, sapreste darmi una mano?

  2. #2
    codice:
    $stringa = "unodue
    
    tre</p>";
    
    preg_match_all('#<(.)>(.*?)</\1>#', $stringa, $match);
    
    print_r($match);

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    144
    Grazie!!


    Approfondendo il discorso e volendo scegliere anche i tag composti da più lettere (e con attributi) ho fatto così:

    codice:
    $stringa = "<span id="tag">uno</span>due
    
    tre</p>";
    
    preg_match_all('#<([\w]+)[^>]*>(.*?)</\1>#', $stringa, $match);
    e sembra funzionare!

    Poi mi sono bloccato nel caso in cui la stringa sia formata da tags annidati:

    codice:
    $stringa = "<span id="tag">uno</span> due 
    
    tre</p>";
    
    preg_match_all('...', $stringa, $match);
    Come posso scrivere la RE in modo che copra anche questo caso?

  4. #4
    Allora lascia perdere le regexp, vanno bene solo per markup semplice. Usa un DOM parser come http://php.net/manual/en/class.domdocument.php oppure http://simplehtmldom.sourceforge.net/

    O magari va bene anche un semplice strip_tags(), dipende dal testo sorgente.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    144
    Ho risolto con il seguente codice:

    Codice PHP:
    $stringa str_get_html("[b]<span id='tag'>uno</span>[/b][i]due[/i]

    tre</p>"
    );

    foreach(
    $stringa->find('text') as $element) {
      echo 
    $element;

    Quindi con le RE non era possibile una soluzione?

    Grazie mille!

  6. #6
    Tecnicamente non e' impossibile, ma se si comincia coi tag annidati risolvere con le regexp diventa un incubo.

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.