De lo contrario. Las personas están repitiendo que las expresiones regulares son memes malvados con demasiada frecuencia en la OMI. Es obvio que preg_match se usa en exceso php, pero es menos obvio que a menudo es sensato hacerlo (en PHP).
Llegaría tan lejos y conjeturaría que es otra microoptimización en php land para usar las funciones de cadena. Hay muchos y muchos útiles, y generalmente son la mejor opción. Pero no debes rehuir preg_matcha favor de múltiples strposy ifcadenas. Porque en la práctica resulta que libpcre es a menudo más rápido de lo que PHP puede ejecutar un ciclo buscando alternativas de cadenas, por ejemplo
Como un ejemplo reciente me hizo darme cuenta, probando si una cadena está en minúsculas:
if ($string == strtolower($string))
Es más fácil de leer que:
if (!preg_match("/[A-Z]/", $string))
Y asumirías que el primero debe ser más rápido, ya que es todo PHP. Pero en realidad, la expresión regular solo mira sobre la cadena una vez, y puede abortar la condición negada tan pronto como encuentra una letra mayúscula. Sin embargo, el enfoque strtolower () mira dos veces la cadena. Primero strtolower () hace una cadena duplicada iterando sobre cada letra, comparándola y mayúscula. Luego, ==itera sobre el original y la copia nuevamente, comparándolos una vez más.
Entonces ese no es un caso obvio. Y para ser objetivo, el primero suele ser más rápido, ya que normalmente solo compara cadenas cortas. Pero es imperativo no ir ciegamente suponiendo que las funciones de cadena PHP siempre son recomendables sobre las expresiones regulares.
(Estoy tentado de agregar otra queja sobre la divertida respuesta de @bobince con respecto a xhtml-regexes, y cómo recientemente a menudo se vincula de una manera muy inútil. Y las respuestas más objetivas a continuación se ignoran).