Di recente ho avuto una discussione amichevole con Ghoti su ciò che costituisce un'espressione regolare nei commenti alla mia risposta a questa domanda. Ho affermato che la seguente è un'espressione regolare:
`[Rr]eading[Tt]est[Dd]ata`
Ghoti non era d'accordo, sostenendo che si tratta invece di un file glob. La pagina globale su Wikipedia afferma che (sottolineatura mia):
I glob non includono la sintassi per la stella di Kleene che consente ripetizioni multiple
della parte precedente dell'espressione; quindi non sono
considerate espressioni regolari, che possono descrivere un insieme più ampio di
lingue regolari su un dato alfabeto finito.
Tuttavia, non vi è alcuna citazione per questa affermazione, indicando che si tratta solo dell'opinione di un particolare editore di Wikipedia.
La specifica The Single UNIX ® , versione 2, afferma che una Basic Regular Expression (BRE) può anche essere un singolo carattere:
Un carattere ordinario è un BRE che corrisponde a se stesso:qualsiasi carattere nel
nel set di caratteri supportato, ad eccezione dei caratteri speciali BRE
elencati in Caratteri speciali BRE .
Quindi, qual è la definizione di un'espressione regolare nel mondo *nix e questa definizione esclude i glob di file?
Risposta accettata:
Come lk- ha detto, il -name
opzione di find
tratterà l'argomento come un glob, non come un'espressione regolare.
Se una stringa viene interpretata come un glob o un'espressione regolare o solo una stringa semplice dipende da cosa viene utilizzato per eseguire l'interpretazione. È una questione di contesto. La stringa nel tuo esempio, [Rr]eading[Tt]est[Dd]ata
può essere valutato in diversi modi, ma quello che è dipende da come lo stai usando. Usalo come un globo, è un globo. Usalo come regex, è un regex. Nel caso della domanda da dove ha avuto origine, l'OP ha descritto la stringa come una regex. Pertanto possiamo presumere che stesse pianificando di interpretarlo come una regex.
Un singolo carattere può anche essere una regex, assolutamente. Può anche essere una stringa e può anche essere un globo. Potrebbe essere interpretato come un byte o un tinyint, se lo desideri. Tutto dipende dal contesto.
Esistono numerose specifiche per le espressioni regolari in varie forme. BRE ed ERE sono ben documentati. PCRE aggiunge molte funzionalità. Molti interpreti regex implementeranno, ad esempio, "tutto di ERE e alcuni di PCRE". Oppure faranno ERE meno alcune funzionalità. Se segui le specifiche formali, molti molti strumenti rivendicano il supporto regex che risulta essere errato o incompleto. Conoscere i dettagli ti consente di adattare le tue soluzioni alla raccolta di funzionalità disponibili all'interno di qualsiasi strumento stia valutando la tua espressione regolare.
Correlati:il comando `ls` non elenca gli ultimi contenuti della directory?Quindi ... se stai cercando definizioni che "escludano" i glob, stai guardando questo dalla prospettiva sbagliata. Che cos'è è determinato da come lo usi .