Pelo contrário. As pessoas papagaiam o regex são memes malvados com muita frequência IMO. É óbvio que preg_match é usado em excesso php
, mas é menos óbvio que muitas vezes é sensato fazê-lo (em PHP).
Eu iria tão longe e conjecturaria que é mais uma micro-otimização no php land para usar as funções de string. Existem muitos e muitos úteis, e geralmente são a melhor escolha. Mas você não deve evitar a preg_match
favor de múltiplos strpos
e if
correntes. Porque, na prática, o libpcre é geralmente mais rápido do que o PHP pode executar um loop procurando alternativas de strings, por exemplo
Como um exemplo recente me fez perceber, testando se uma string é toda em minúscula:
if ($string == strtolower($string))
É mais legível que:
if (!preg_match("/[A-Z]/", $string))
E você assumiria que o primeiro deve ser mais rápido, já que é totalmente PHP. Mas, na realidade, o regex somente examina a string uma vez e pode abortar a condição negada assim que encontrar uma letra maiúscula. A abordagem strtolower (), no entanto, examina a string duas vezes. O primeiro strtolower () cria uma duplicata de sequência iterando sobre cada letra, comparando-a e colocando-a em maiúscula. Em seguida, ==
itera o original e a cópia novamente, comparando-os mais uma vez.
Portanto, esse não é um caso óbvio. E para ser objetivo, o primeiro é geralmente mais rápido, já que você normalmente compara seqüências curtas. Mas é imperativo não ficar cego com a suposição de que as funções de string do PHP são sempre aconselháveis sobre expressões regulares.
(Estou tentado a acrescentar outro comentário divertido sobre a resposta divertida de @ bobince em relação a xhtml-regexes, e como ela é frequentemente vinculada de uma maneira muito inútil. E as respostas mais objetivas abaixo são ignoradas.)