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

    [Regex] Tutti i tag HTML tranne...

    Ciao a tutti ho una espressione regolare che uso per eliminare tutti i tag HTML da una stringa, ed è
    codice:
    #<[a-zA-Z0-9][^><]*>|<.[a-zA-Z0-9][^><]*>/g#
    e visto che in realtà non volevo eliminare gli a capo l'ho modificata così:
    codice:
    #<[^(br)][^><]*>|<.[^(br)][^><]*>/g#
    poi però mi sono accorto che volevo non togliere nemmeno i link (si ci arrivo un po' in ritardo =P) ho modificato così:
    codice:
    #<[^(br)(a)][^><]*>|<.[^(br)(a)][^><]*>/g#
    però qui arriva il problema.
    Il sistema mi lascia stare i tag di inizio dei link però mi elimina il VVoVe:

    Come posso modificare l'espressione per fare in modo che mi elimini anche quello di chiusura?

    Grazie mille in anticipo =)
    Flash Developer for Rich Media
    PHP, jQuery Developer

  2. #2
    Mi correggo sulla richiesta

    Come posso modificare l'espressione per fare in modo che NON mi elimini anche quello di chiusura?


    Proprio nessuno? =\
    Flash Developer for Rich Media
    PHP, jQuery Developer

  3. #3
    Ti interessa come studio delle regexp, o ti serve il risultato? Perche' nel secondo caso c'e' strip_tags()

    Se e' il primo appena ho tempo lo studio.

  4. #4
    In realtà mi servirebbe solo il risultato però sarebbe interessante anche per studio sapere come si fa con le espressioni regolari.

    Quindi ora che il risultato so come ottenerlo prenditi tutto il tempo per pensare alla regex =P

    e ancora grazie mille ^^
    Flash Developer for Rich Media
    PHP, jQuery Developer

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    A sentimento senza provarla
    Codice PHP:
    #<[^(br|a|//a)][^><]*>|<.[^(br|a|//a)][^><]*>/g# 

  6. #6
    Era un problema interessante (mi sono sempre piaciute le regexp), prima versione del pattern:

    codice:
    #</?+(?!a|br).*?>#s
    Fa uso di strumenti particolari: possessive quantifiers, negative lookahead e lazy quantifiers. Un buon sito di info e' www.regularexpressions.info

    Spiegazione del pattern:
    1. cerca un '<'
    2. cerca un '/' opzionale (qui ho usato il possessive quantifier)
    3. seguito da qualcosa che non e' 'a' o 'br'
    4. cerca un carattere qualsiasi (con quantifier lazy)
    5. cerca un '>'

    Dettagli
    2. il possessive quantifier qui e' necessario per evitare match indesiderati a causa del backtracking delle regexp, che di default fa di tutto pur di ottenere un match. Senza quel '+', il pattern avrebbe matchato anche </a> perche' lo slash sarebbe stato "acchiappato" dal punto che viene dopo. In questo modo gli si dice "cerca uno slash opzionale: se non c'e' ok, ma se c'e' e' mio e di nessun altro".

    3. il negative lookahead in sostanza qui dice "dopo il '<' e lo slash opzionale non deve esserci a|br". Nota che lookahead e lookbehind sono "zero-width assertions" cioe' non contano come un carattere, sono solo un controllo; in altre parole non sono come una character class: puoi fare [a-z]+ ma non puoi fare (?!a|br)+

    4. il lazy quantifier (i normali ripetitori seguiti dal '?') cambia il comportamento dell'engine, che di default e' "prendi piu' che puoi", in "prendi il meno che puoi". In pratica serve per fare cose come <.*?> invece di <[^>]+>

    NOTA: il pattern e' migliorabile per quanto riguarda la parte "a|br", perche' scritto cosi' esclude solo i tag che INIZIANO per "a" o "br". Quindi un ipotetico tag <alfa> sarebbe escluso dall'eliminazione. Una versione migliorata:

    codice:
    #</?+(?!(?:a|br)[\s>]).*?>#s
    che cerca tag che non abbiano "a" o "br" seguiti da blank space o '>' (il (?:..) e' solo la sintassi per raggruppare senza memorizzare il contenuto delle parentesi).

    Spero sia abbastanza chiaro, senno' chiedi pure

  7. #7
    Wow.... non pensavo fosse un mondo così enorme quello delle regex.... °___°
    è un linguaggio a se stante... ci potrebbero fare un corso universitario solo su quelle (magari ci sono anche xD)

    Cmq grazie mille sei stato chiarrissimo =)
    e quel sito ero riuscito a scovarlo anch'io xD
    Flash Developer for Rich Media
    PHP, jQuery Developer

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.