Au contraire. Les gens parroient les regex sont trop souvent des mèmes maléfiques de l' OMI. Il est évident que preg_match est surutilisé php
, mais il est moins évident qu'il est souvent judicieux de le faire (en PHP).
J'irais si loin et conjecturerais que c'est encore une autre microoptimisation en php land pour utiliser les fonctions de chaîne. Il y en a beaucoup et beaucoup utiles, et ils sont généralement le meilleur choix. Mais vous ne devriez pas fuir preg_match
en faveur de multiples strpos
et de if
chaînes. Parce qu'en pratique, il s'avère que libpcre est souvent plus rapide que PHP ne peut exécuter une boucle à la recherche d'alternatives de chaînes, par exemple
Comme un exemple récent m'a fait réaliser, tester si une chaîne est tout en minuscules:
if ($string == strtolower($string))
Est plus lisible que:
if (!preg_match("/[A-Z]/", $string))
Et vous supposeriez que le premier doit être plus rapide, car il est entièrement en PHP. Mais en réalité, l'expression régulière ne regarde la chaîne qu'une seule fois et peut annuler la condition annulée dès qu'elle trouve une lettre majuscule. L'approche strtolower () examine cependant la chaîne deux fois. Le premier strtolower () crée une chaîne en double en itérant sur chaque lettre, en la comparant et en la mettant en majuscule. Ensuite, l' ==
itération sur l'original et la copie à nouveau, en les comparant une fois de plus.
Ce n'est donc pas un cas évident. Et pour être objectif, le premier est souvent plus rapide, car vous ne comparez normalement que des chaînes courtes. Mais il est impératif de ne pas aller aveuglément en supposant que les fonctions de chaîne PHP sont toujours recommandées par rapport aux expressions régulières.
(Je suis tenté d'ajouter une autre diatribe au sujet de la réponse amusante de @ bobince concernant les xhtml-regexes, et comment elle est récemment souvent liée de manière très inutile. Et les réponses plus objectives ci-dessous sont ignorées.)