29Jun

Come utilizzare le espressioni regolari di base per cercare meglio e risparmiare tempo

Sia che tu stia cercando con Grep o guardando programmi che possono rinominare automaticamente i file per te, probabilmente ti sei chiesto se c'era un modo più semplice per portare a termine il tuo lavoro. Per fortuna, c'è, e si chiama "espressioni regolari".

( Comico da XKCD.com)

Cosa sono le espressioni regolari?

Le espressioni regolari sono istruzioni formattate in un modo molto specifico e possono rappresentare molti risultati diversi. Conosciuto anche come "regex" o "regexp", vengono utilizzati principalmente nelle funzioni di ricerca e denominazione dei file. Una regex può essere utilizzata come una formula per creare un numero di diversi output possibili, che vengono tutti ricercati. In alternativa, è possibile specificare il modo in cui un gruppo di file deve essere denominato specificando un'espressione regolare, e il software può spostarsi in modo incrementale al successivo output previsto. In questo modo, puoi rinominare più file in più cartelle in modo semplice ed efficiente e puoi andare oltre le limitazioni di un semplice sistema di numerazione.

Poiché l'uso delle espressioni regolari si basa su una sintassi speciale, il tuo programma deve essere in grado di leggerli e analizzarli. Molti programmi di ridenominazione di file batch per Windows e OS X hanno il supporto per le espressioni regolari, nonché lo strumento di ricerca multipiattaforma GREP( che abbiamo esaminato nella nostra guida Bash Scripting per principianti) e lo strumento da riga di comando Awk per * Nix. Inoltre, molti gestori di file, strumenti di avvio e strumenti di ricerca alternativi li utilizzano e hanno un ruolo molto importante in linguaggi di programmazione come Perl e Ruby. Altri ambienti di sviluppo come. NET, Java e Python, così come l'imminente C ++ 11, forniscono tutti librerie standard per l'utilizzo di espressioni regolari. Come puoi immaginare, possono essere davvero utili quando cerchi di ridurre al minimo la quantità di codice che inserisci in un programma.

Una nota sui caratteri di escape

Prima di mostrarti esempi, vorremmo segnalare qualcosa. Useremo la shell bash e il comando grep per mostrarti come applicare le espressioni regolari. Il problema è che a volte vogliamo usare caratteri speciali che devono essere passati a grep, e la shell bash interpreterà quel carattere perché lo usa anche la shell. In queste circostanze, dobbiamo "sfuggire" a questi personaggi. Ciò può creare confusione perché questa "fuga" di caratteri si verifica anche all'interno delle espressioni regolari. Ad esempio, se vogliamo inserire questo in grep:

\ & lt;

dovremo sostituirlo con:

\\\ & lt;

Ogni carattere speciale qui ha una barra rovesciata. In alternativa, puoi anche usare le virgolette singole:

'\ & lt;'

Le virgolette singole dicono a BASH di non interpretare cosa c'è dentro di loro. Sebbene richiediamo di eseguire questi passaggi in modo che possiamo dimostrare per te, i tuoi programmi( specialmente quelli basati su GUI) spesso non richiedono questi passaggi aggiuntivi. Per mantenere le cose semplici e dirette, l'espressione regolare verrà data come testo citato, e vedrai la sintassi di escape negli screenshot della riga di comando.

Come si espandono? I regexps di

sono un modo davvero sintetico per dichiarare i termini in modo che il tuo computer possa espanderli in più opzioni. Diamo un'occhiata al seguente esempio:

tom [0123456789]

Le parentesi quadre - [e] - indicano al motore di analisi che qualsiasi cosa sia all'interno, qualsiasi carattere UNO può essere usato per corrispondere. Qualunque cosa si trovi all'interno di queste parentesi è chiamata set di caratteri.

Quindi, se avessimo una lista enorme di voci e abbiamo usato questa espressione regolare per la ricerca, i seguenti termini sarebbero stati abbinati:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

e così via. Tuttavia, il seguente elenco NON verrebbe abbinato e quindi NON verrebbe visualizzato nei risultati: pomodoro

  • ;la regex non tiene conto di nessuna lettera dopo "tom"
  • Tom;la regex è case sensitive!

Puoi anche scegliere di cercare con un punto( .) Che consenta a qualsiasi personaggio presente, purché vi sia un personaggio presente.

Come potete vedere, grepping con

. tom

non ha mostrato termini che avevano solo "tom" all'inizio. Anche i "pomodori verdi" sono entrati, perché lo spazio prima di "tom" conta come un personaggio, ma termini come "tomF" non avevano un carattere all'inizio e sono stati quindi ignorati.

Nota: il comportamento predefinito di Grep è di restituire un'intera riga di testo quando una parte corrisponde alla tua espressione regolare. Altri programmi potrebbero non farlo, e puoi disattivarlo in grep con il flag '-o'.

Puoi anche specificare l'alternanza usando una pipe( |), come qui:

speciali( s | z) e

Questo troverà entrambi:

  • specialize
  • specialize

Quando usi il comando grep, dobbiamo sfuggire ai caratteri speciali( ,|, e) con barre retroverse e utilizzare il flag '-E' per farlo funzionare ed evitare errori brutti.

Come accennato sopra, questo è perché dobbiamo dire alla shell bash di passare questi caratteri a grep e di non fare nulla con loro. Il flag '-E' dice a grep di usare le parentesi e le pipe come caratteri speciali.

Puoi cercare per esclusione usando un cursore che si trova all'interno delle parentesi quadre e all'inizio di un set:

tom [^ F | 0-9]

Ancora, se stai usando grep e bash, ricorda di uscirequella pipa!

I termini che erano nella lista ma NON sono visualizzati sono:

  • tom0
  • tom5
  • tom9
  • tomF

Questi non corrispondono alla nostra espressione regolare.

Come posso utilizzare gli ambienti?

Spesso, cerchiamo in base ai limiti. A volte vogliamo solo stringhe che appaiono all'inizio di una parola, alla fine di una parola o alla fine di una riga di codice. Questo può essere fatto facilmente usando ciò che chiamiamo ancore.

L'uso di un segno di omissione( al di fuori delle parentesi) consente di designare "l'inizio" di una linea.

^ tom

Per cercare la fine di una riga, utilizzare il simbolo del dollaro.

tom $

Puoi vedere che la nostra stringa di ricerca arriva PRIMA dell'ancora in questo caso.

È anche possibile per le corrispondenze che appaiono all'inizio o alla fine delle parole, non linee intere.

\ & tom; tom

tom \ & gt;

Come accennato nella nota all'inizio di questo articolo, dobbiamo sfuggire a questi caratteri speciali perché stiamo usando bash. In alternativa, puoi anche usare le virgolette singole:

I risultati sono gli stessi. Assicurati di utilizzare virgolette singole e non virgolette.

Altre risorse per i regex avanzati

Abbiamo solo colpito la punta dell'iceberg qui. Puoi anche cercare termini di denaro delineati dall'indicatore di valuta e cercare uno dei tre o più termini corrispondenti. Le cose possono diventare davvero complicate. Se sei interessato a saperne di più sulle espressioni regolari, ti preghiamo di dare un'occhiata alle seguenti fonti.

  • Zytrax.com ha alcune pagine con esempi specifici del perché le cose non coincidono.
  • Regular-Expressions.info ha anche una guida killer per molte delle cose più avanzate, oltre a una comoda pagina di riferimento.
  • Gnu.org ha una pagina dedicata all'uso delle regex con grep.

Puoi anche creare e testare le tue espressioni regolari usando uno strumento online gratuito basato su Flash chiamato RegExr. Funziona mentre digiti, è gratuito e può essere utilizzato nella maggior parte dei browser.

Hai un uso preferito per le espressioni regolari? Conosci un grande rinominatore di batch che li usa? Forse vuoi solo vantarti del tuo grep-fu. Contribuisci con i tuoi pensieri commentando!