Hey

,
Oui mais non.
Une expression régulière n'est rien d'autre que l'expression d'un langage régulier, soit une syntaxe pour représenter un automate qui vérifie une grammaire régulière (cf. théorie des langages, première année).
Que fait PHP lorsqu'il rencontre une expression régulière ? Il la compile. Malheureusement, pas de système de cache des machines/automates compilés (j'ai pourtant cherché, mais je n'ai rien trouvé, et je n'arrive pas à forcer PHP à le faire).
Est-ce que la compilation est longue ? Oui.
Est-ce qu'on peut optimiser les expressions régulières ? Bien sûr. On les représente sous forme d'automate ou de grammaire et on applique des règles simplistes (toujours vues en première année) et on peut réussir à les optimiser.
Est-ce qu'une manipulation de chaînes est moins coûteuse ? Ça dépend, la réponse n'est pas prédictible de manière générale. Il faut analyser chaque cas, un par un.
Les chaînes de caractères dans PHP sont particulières. Beaucoup de langages (à l'
instar du C, C++, Java etc.) considèrent une chaîne de caractères comme étant un tableau de caractères. Logique. Plus la chaîne est grande, plus le tableau est grand, et donc plus il faut de zone mémoire contiguë pour la stocker. La copie est donc coûteuse car possiblement longue. En effet, scanner toute la mémoire à la recherche d'une zone contiguë suffisamment grande est longue. D'autant plus que si toute la mémoire a été lue et qu'aucun emplacement n'est suffisament grand, alors il faut fragmenter la mémoire. Peut-être qu'on aura du
swap (mémoire vers disque ou disque vers mémoire) ce qui est très très long (cheminement + lecture du disque). Et qui dit fragmentation, dit aussi segmentation, gestion de pages et tout le toutime (cf, gestion des OS, première année).
Mais dans PHP, c'est différent. L'interpréteur considère toutes les chaînes simplement guillemetées (comprendre, entourées de guillemets simples) comme des constantes (tada !). Les chaînes doublement guillemetées sont évaluées puis je-ne-sais-plus-ées.
Premièrement donc, il faut utiliser au maximum les chaînes avec des guillemets simples. Plus rapide pour PHP.
Secondement, passer une référence est forcément moins coûteuse en mémoire (et en temps) que de passer une valeur. Néanmoins, comme PHP considère que ce sont des constantes (c'est à dire que ça a un emplacement mémoire particulier, que l'on pourrait appeler statique), il les traite très rapidement. Il faut voir les cas à l'utilisation. Manipuler une chaîne de 16 caractères est totalement négligeable. Manipuler une chaîne de 16 millions de caractères est une autre histoire, et oui, il faut taper sur les références.
Autre considération : PHP ne sert pas à faire du bas-niveau. Le système de référence est présent pour profiter du système de pointeur dans le sens où on peut manipuler une même données à plusieurs endroits simultanément (
i.e. un objet est envoyé dans une méthode, on le triture, mais on peut aussi l'envoyer autre part, les modifications auront été prises, même si on est à un autre endroit du programme), et non pas pour faire de l'optimisation. Si tu veux faire des programmes très optimisés, alors il faut passer au C

.