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 quanto segue è 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 glob su Wikipedia afferma che (enfasi la mia):
I globi non includono la sintassi per la stella di Kleene che consente ripetizioni multiple della parte precedente dell'espressione; pertanto non sono considerate espressioni regolari, che possono descrivere un insieme più ampio di lingue regolari rispetto a un dato alfabeto finito.
Tuttavia, non vi è alcuna citazione per questa affermazione, indicando che si tratta solo di una particolare opinione dell'editor di Wikipedia.
La specifica UNIX ® singola, versione 2 , afferma che un'espressione regolare di base (BRE) può anche essere un singolo carattere:
Un personaggio ordinario è un BRE che si adatta a se stesso: qualsiasi personaggio 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 quella definizione esclude globs di file?
*
ha due significati diversi in BRE e globs. Nota: non credo che il termine glob sia usato da nessuna parte nelle specifiche POSIX - si chiama invece Pattern Matching ed è descritto nel capitolo del linguaggio shell.
grep
,sed
eawk
. Vim usa la propria varietà, così come Perl.