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

    Regex per rilevare tag href non chiuso correttamente

    Scusate,
    mi suggerite una regex per trovare in una pagina tag href non correttamente chiusi, come questo?
    codice HTML:
    <a href="https://www.sito.it/" target="_blank" rel="noopener"proprietà</a>
    In prativa manca il ">" finale. Mi suggerite un regex che sia in grado di rilevare questo?

    Grazie e buon lavoro
    News In Web - il social news per tutti
    --> https://www.newsinweb.net <--

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,682
    Premessa: in casi del genere, per poter formulare una soluzione veramente valida, sarebbe opportuno fornire molti più esempi di casistiche in cui la regex debba trovare o non trovare dei risultati.

    Infatti, per rilevare il caso specifico del tuo esempio, basterebbe una regex del genere:
    codice:
    <a[^>]+href[^>]*<\/a>
    con cui puoi eseguire ricerche del genere:
    codice:
    // Occorrenze trovate
    <a href="https://www.sito.it/" target="_blank" rel="noopener"proprietà</a>
    <a class="foo" href="bar" link</a>
    
    // Occorrenze non trovate
    <a href="https://www.sito.it/" target="_blank" rel="noopener">proprietà</a>
    <a class="foo" href="bar">link</a>
    Fino a questo punto funziona come hai esplicitamente richiesto, però in casi particolari potresti ottenere dei risultati inattesi.

    La cosa può essere molto più complessa se si ragiona in termini di validità del codice HTML; possono entrare in gioco diversi fattori: prevedere possibili tag interni, stabilire quale sia la corretta stesura degli attributi, nonché la regolare sintassi del codice HTML, quindi stabilire su quale versione HTML si basa il documento (o i campioni) da analizzare, ecc.

    Alcuni esempi di falsi positivi e falsi negativi:
    codice:
    <a href="foo" title="bar</a>">link</a>
    In questa stringa, nonostante il tag in sé sia valido e chiuso perfettamente, verrà trovato <a href="foo" title="bar</a> perché il valore di un attributo presenta la stringa "</a>". Si ha quindi un falso positivo.

    codice:
    <a href="foo" title="->"link</a>
    Questo non viene rilevato nonostante sia un caso in cui il tag non è correttamente chiuso, e debba quindi essere trovato. Infatti un attributo presenta la parentesi angolare chiusa, cioè lo stesso carattere che dovrebbe delimitare il tag di apertura. Si ha quindi un falso negativo.

    E' chiaro che si tratta di casi particolari e che nello specifico, per i caratteri speciali dentro gli attributi, sarebbe opportuno utilizzare le entità HTML.

    Possono presentarsi però altri casi più consueti:
    codice:
    <a id="bar" href="foo"<i>link</i></a>
    Il tag <a> è malformato e risulta non valido. Potrebbe benissimo rientrare tra i casi simili al tuo esempio; il problema è che la regex generale non lo rileva perché viene fregata da quel tag <i> annidato. Si ha quindi un falso negativo. Vuoi che sia trovato oppure no?

    codice:
    <a href="foo" title="bar>link</a>
    Qui è presente la chiusura del tag per cui, dalle tue indicazioni, questa occorrenza non dovrebbe essere trovata dalla regex (e di fatto è così). Però il problema è che mancano le virgolette di chiusura dell'attributo title, per cui l'intero tag, e tutto ciò che gli viene dopo, è compromesso rendendo non valido il codice HTML. Questo tag verrà addirittura ignorato dai browser. Vuoi che sia trovato oppure no?

    codice:
    <a href="foo" title=>link</a>
    Anche qui è presente la chiusura del tag ma manca il valore dell'attributo title che genera un errore di validazione, nonostante i browser riescano a risolverlo. Anche questo caso non viene rilevato dalla regex, secondo le tue indicazioni. Vuoi che sia trovato oppure no?

    Potrebbero esserci ancora tante altre casistiche per le quali potresti aver bisogno di una regex ben più complessa. In tal caso dovresti stilare e fornire, come già accennato, un elenco di tutte le possibili ed eventuali casistiche che vuoi siano trovate e di quelle che vuoi non siano trovate; diversamente è difficile ottenere un aiuto mirato.

    Poi, non so, magari ti è sufficiente anche solo quella regex generale
    Fai sapere.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Ciao KillerWorm,
    che dire, tanto di cappello per la tua esauriente risposta. Secondo me in te c'� anche una matrice linuxiana

    Per quanto riguarda il mio problema ho risolto. In pratica mi serviva impostare una regex con il seo spider Screaming Frog, trovando le pagine che hanno il tag href interrotto, o comunque non correttamente impostato.

    Da un'analisi ho notato che dopo il rel="noopener", il tag href prosegue erroneamente con una lettera e non con il corretto simbolo di chiusura ">". Quindi ho impostato il Custom Search con la seguente regex:
    codice:
    rel="noopener"[A-Za-z]
    e mi ha rilevato quello che mi serviva su circa 50.000 pagine.

    Grazie ancora per il tuo contributo, siete sempre una grande risorsa

    Un saluto e a presto
    News In Web - il social news per tutti
    --> https://www.newsinweb.net <--

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,682
    Secondo me in te c'� anche una matrice linuxiana
    può essere ma probabilmente ha un tag chiuso male, perché non funziona

    Per quanto riguarda il mio problema ho risolto
    [...]
    Un saluto e a presto
    Benissimo
    Buon proseguimento e un sereno weekend
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Tag per questa discussione

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.