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

    Espressioni regolari e PHP

    Le espressioni regolari sono Perl, ma mi servono in PHP. Ho postato in entrambi i forum.
    Premetto che ho letto tutto quello che ho trovato sulle espressioni regolari, ma continuo a fare molta fatica a capirle.

    Da una stringa di questo tipo
    codice:
    $stringa = "<span class="radice">
      prima riga
      <span>seconda riga</span>
      terza riga
    </span>
    qualcos'altro
    <span class="radice">
      prima riga
      <span>seconda riga</span>
      terza riga
    </span>";
    devo ottenere un Array che contenga nei vari elementi tutto il contenuto dello span di classe "radice" ed un intero che rappresenti il numero di ricorrenze.
    Per ora, il meglio che sono riuscito a fare, è
    codice:
    $itemregexp = "%radice *\" *>(.*?)</span>%is";
    $match_count = preg_match_all($itemregexp, $stringa, $items);
    Ma in questo modo viene tagliata la terza riga di ogni span.
    Come posso fare? Qual è l'espressione regolare giusta, ammesso che esista?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se sei SICURO che in ogno pezzo c'e` uno /span>, potresti fare:

    $itemregexp = "%radice *\" *\>(.+?\<\/span\>.+?)</span>%is";

    Altrimenti le RE non sono lo strumento corretto da usare.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    no, ce ne può essere un numero qualunque, anche nessuno.
    Ci speravo proprio ci fosse un modo semplice ed immediato... l'unica cosa di cui posso essere "sicuro" è che ogni span aperto abbia la sua chiusura...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Allora non ti resta che "scannerizzare" la stringa contando il numero di "\<span.+?\>" e di "\<\/span\>" finche` non chiudi il tutto.
    E` una cosa un po' pesante, ma ti posto uno schema (fatto per il Perl, pero`; adattarlo al PHP devi farlo tu).
    codice:
    my spancount=0;
    my $punt = 0;
    $_ = ...la tua stringa completa;
    while(/.*?(\<span.*?\>)|(\<\/span\>)(.*)$/si) {
        if(length($1)>1) { spancount++; }
        if(length($2)>1) { spancount--; }
        if(spancount==0) { break; }
        $_ = $3;
    }
    my $pezzo = substr($_,0,$+[3]);
    A questo punto (salvo errori), il $pezzo comprende tutto lo span piu` esterno.

    Se metti il while dentro un altro while(1) con break se length($_) < 3 e $pezzo lo fai diventare una array, hai spezzato la tua stringa in tanti piccoli pezzi contententi ciascuno uno <span ...</span> di primo livello.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5

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.