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

    [espressioni regolari] estrarre tag innestati

    Riposto, cercando di farlo conforme al regolamento.
    Il primo problema l'ho risolto, resta il seguente. 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 d 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?

  2. #2
    non puoi farlo "semplicemente" con le regexp

    o metti su la libreria tidy...o devi fare una cosa un po assai particolare...ovvero una cosa ricorsiva ^^

    perché quando estrai un TAG...ne può contenere altro e una qualsiasi espressione regolare cercherà la chiusura del primo tag che trova...

    quindi se hai

    codice:
    <a>
      
      
    </a>
    ti verrà trovato SOLO A e conterrà B...quindi ogni volta che trovi un risultato devi rilanciarci su una preg_match_all

    il tutto è estremamente pesante, e pericoloso...xche se il codice html che riceve non è scritto bene scoppia tutto ^^ senza considerare che i tag senza chiusura lui non te li listerà proprio...quindi quando non ti trova tag con apertura e chiusura devi lanciare una preg match semplice che estragga tutti i tag senza guardare la chiusura...se ti trova invece tag innestati li devi anche lanciare quella per tirare fuori i tag che non hanno una chiusura...e la cosa è un serio problema...perché o fai un'espressione molto poco logica...o dopo che estrai tutti i tag elimini quelli che hanno una chiusura guardando l'altro array

    insomma...un casino immenso


    anche xche dovresti costruire un array gigantesco non molto gestibile

    meglio che usi la libreria tidy

    cosa ci devi fare???

  3. #3
    l' arpiglio e' che la condizione esterna e' diversa da quella interna, forse smanettando in asserzioni ed esclusioni si potrebbe fare la giusta preg
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    si tratta di questo servizio qui: http://www.blogitalia.it/feed_generator.asp
    Fino ad ora sta funzionando bene, perchè è difficile che ci siano span innestati e quindi la soluzione che ho usato in origine funziona egregiamente. Ora però, per motivi che non sto a raccontare, ci saranno span ovunque. Devo quindi trovare il modo di estrarre la stringa fino al </span> giusto, un bel casino.
    E non posso usare soluzioni ricorsive, perchè non posso essere sicuro che l'html che sarà analizzato sia fatto bene.
    Ora studio un po' le tidy, sperando che sul server in questione siano installate...
    sinceramente speravo che le complicatissime e, per me, astruse regexp contenessero la soluzione...

  5. #5
    sul srever non sarà CERTAMENTE installata la libreria ^^
    la tua unica alternativa, forse, è farti un parser, non è complesso, ma non sarà un missile (ma si parla comunque di centesimi\millesimi di secondo)

  6. #6
    Il fatto che non sia un missile non è un problema, tanto si perde più tempo ad accedere al web. Potrebbe essere un problema se il carico computazionale fosse eccessivo, perchè le richieste sono parecchie.
    A questo punto, credo che mi inventerò un marcatore diverso da /span, anche se in questo modo di retrocompatibilità neanche a parlarne. Tutto sommato mi sembra la soluzione più semplice.
    Grazie a tutti

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.