Nov 16 2008

HelpSemaforoQuesto semaforo indica il livello difficoltà del post
semaforo verde - articolo per tutti semaforo giallo - articolo avanzato semaforo rosso - articolo per esperti

l’operatore OR nei report

autore: categoria: report

Una delle domande che mi viene rivolta più spesso è come si faccia a immettere due o più parole nella casellina di ricerca a fianco del menu a tendina “contenente / tranne”. L’inserimento di spazi, virgole e segni più infatti non sortisce gli effetti desiderati, e spesso non sortisce proprio nessun effetto se non quello di azzerare i dati mostrati. Se stiamo guardando l’elenco delle pagine e vogliamo dire a Google Analytics di mostrare le pagine che nell’url contengono la parola “cane” OPPURE la parola “gatto” l’unico modo possibile è inserire una espressione regolare.

La notizia buona è che l’espressione equivalente a un semplice “questo oppure questo” è molto facile, quella cattiva è che per esigenze leggermente più avanzate è necessario addentrarsi nelle espressioni regolari. Ma affrontiamo una questione alla volta, cercando di non complicare troppo la questione.
L’operatore booleano OR viene reso con il segno pipe ( il segno | che si trova facendo SHIFT + \ nella tastiera italiana), per cui per ottenere il risultato menzionato precedentemente si inserirà l’espressione
cane|gatto

Questo tipo di espressione funziona ovviamente sia nel caso si stia usando il menu a tendina impostato su “contenente” sia su “tranne”. Quello che invece non esiste è l’operatore booleano AND. O meglio, non esiste nella sintassi delle espressioni regolari e non si tratta di un limite di GA. Le espressioni regolari infatti nascono per intercettare porzioni di dati, tipicamente testuali; non si può fare una regular expression che cerca “cane E gatto” in un testo, bisogna scrivere una espressione regolare più complicata. Devo essere sincero, nonostante regolarmente io stesso mi ponga questa domanda, almeno finché non avrà iniziato e finito la lettura di Mastering Regular Expression della O’Really l’unica sensata (benché non elegantissima) che ho trovato è questa:
cane(.*)gatto|gatto(.*)cane

che in italiano significa “trova qualsiasi riga in cui ci sia la parola cane e gatto inframmezzate da qualsiasi cosa, oppure gatto e cane inframmezzate da qualsiasi cosa”.

Condividi l'articolo:

3 Commenti

  1. Ciao Marco,
    propongo questa espressione:

    (cane.*|gatto.*){2}

    E’ meno precisa della tua (ad esempio trova anche “gatto gatto” e “cane cane”), ma se le stringhe da cercare sono più di 2 rimane più semplice 🙂

  2. grandissimo! testata e funziona, ma non avevo dubbi 🙂

  3. Forse così cattura anche “cane cane cane” 😀

    (cane.*|gatto.*){2,}

Scrivi un Commento