Le espressioni regolari sono molto efficienti in quello che fanno.
Quando l'attività è banale (ad esempio verifica la presenza di una stringa particolare), una funzione di stringa può essere più veloce di una regex, a seconda della piattaforma. Qui, stai controllando sia per un intervallo di caratteri che per una lunghezza. È improbabile che il codice Lua (compilato in fase di esecuzione) sia più veloce del codice C precompilato della libreria regex PCRE utilizzata da nginx.
In generale, l'espressione regolare per a string from 1 to 6 characters with "-", "_", digits and letters
può essere scritta come
^[-\w]{1,6}$
Questo è dovuto al fatto
- L'ancora
^
afferma che siamo all'inizio della stringa
- La parola
\w
carattere corrisponde a lettere, cifre e il carattere di sottolineatura
$
ancoraggio afferma che siamo alla fine della stringa
Tuttavia, nel nginx, il ~
(richiesta inizia con) operatore ci permette di gettare l'ancora di iniziare ^
. Si potrebbe scrivere qualcosa del genere:
location ~ [-\w]{1,6}$ {
# some rewrite code, for example
# rewrite ^([^/]+)/?$ /oldsite/$1 break;
}
Un altro boccone di informazioni per i curiosi: in Lua per sé, quanto sopra regex potrebbe essere trasformata in un modello di Lua, dove %
viene utilizzato al posto di \
per formare metacaratteri:
^[-%w]{1,6}$
Riferimento
questa è la risposta che avrei scritto +1 – bukart