Anzi. Le persone stanno pappagallando il regex sono meme malvagie troppo spesso IMO. È ovvio che preg_match è abusato php
, ma è meno ovvio che spesso è ragionevole farlo (in PHP).
Andrei così lontano e congetture che è ancora un'altra microottimizzazione nella terra del php per usare le funzioni di stringa. Ci sono molti e molti utili, e di solito sono la scelta migliore. Ma non dovresti evitare preg_match
a favore di multipli strpos
e if
catene. Perché in pratica si scopre che libpcre è spesso più veloce di quanto PHP possa eseguire un loop alla ricerca di alternative di stringa, ad es
Come un recente esempio mi ha fatto capire, testando se una stringa è tutta in minuscolo:
if ($string == strtolower($string))
È più leggibile di:
if (!preg_match("/[A-Z]/", $string))
E supponeresti che il primo debba essere più veloce, dal momento che è tutto-PHP. Ma in realtà il regex osserva una volta la stringa e può interrompere la condizione negata non appena trova una lettera maiuscola. L'approccio strtolower () tuttavia osserva due volte la stringa. Primo strtolower () crea una stringa duplicata ripetendo ripetutamente ogni lettera, confrontandola e aumentandola. Quindi ==
scorre nuovamente l'originale e la copia, confrontandoli ancora una volta.
Quindi non è un caso ovvio. E per essere oggettivi il primo è spesso più veloce, dal momento che normalmente si confrontano solo stringhe corte. Ma è indispensabile non andare alla cieca supponendo che le funzioni di stringa PHP siano sempre consigliate rispetto alle espressioni regolari.
(Sono tentato di aggiungere un altro rant sulla risposta divertente di @ bobince per quanto riguarda le regex xhtml, e come recentemente è spesso collegato in modo molto inutile. E le risposte più obiettive sotto vengono ignorate.)