J'ai besoin de remplacer chaque occurrence de l'une des lettres mais lorsque vous lui donnez une entrée de Comment puis-je le faire ne pas remplacer les choses qu'il est déjà remplacée? p> p> A code>,
o code>,
i code>,
e code>,
u code> avec
[Aoieu]? Code>
J'ai essayé de faire ce qui suit: noir code> au lieu de me donner l'attendu
bl [AOIEU]? CK code]? CK CODE > Cela m'a donné p>
7 Réponses :
Vous voudrez peut-être essayer ce
extrait de la documentation: P>
ordre de remplacement gotcha fort> p> car str_replace () remplace de gauche à droite, cela pourrait remplacer un valeur précédemment insérée lors de plusieurs remplacements. P> blockQuote>
Vous pouvez envisager d'utiliser une expression régulière pour cela, ou vous pouvez faire votre propre fonction qui parcourt une lettre de chaîne une lettre à la fois. Voici une solution de regex: ou votre propre fonction (notez que $ Recherche code> ne peut être qu'un seul char ou une gamme de caractères, pas de chaînes - vous pouvez utiliser
Stros code> ou similaire à la construction, qui gère également des chaînes plus longues): p>
Le regexp ok travaille. À propos du second, je ne suis pas un fan de «faire votre propre» après tous les problèmes qu'il peut faire avec le codage, en particulier avec la langue interprétée.
De quels problèmes parlez-vous? Problèmes de performance, problèmes de débogage, «mauvais programmeur == mauvais code» ou autre chose?
Le type de problèmes lorsque vous mettez en œuvre quelque chose qui est déjà mis en œuvre - un groupe de code inutile. Il existe également des problèmes de performance, la manipulation des chaînes est lente dans le code non natif.
même problème ici mais. Essayer d'utiliser la fonction mais pas sûr de ce que je devrais être ajouté à la 2e variable actuellement '[Aoieu]?'?
$input = str_replace(array('a', 'o', 'i', 'e', 'u'), '~', $input); $input = str_replace('~', '[aoieu]?', $input);
Échoue lorsque vous avez un ~ code> dans l'entrée. Raison triviale que ce n'est pas une solution robuste.
Vous ne pouvez pas "trouver un autre modèle qui ne se produit pas" dans le cas général. Et vous devriez prouver i> que ce sera le plus rapide si vous voulez affirmer cela!
Ce ne sera probablement pas le plus rapide, mais en utilisant un caractère étrange comme ¯ code> ou
œ code> pourrait faire le tour.
Google.com/search?q=str_replace+vs.freg_replace Beaucoup de repères pour str_replace vs prég_replace là-bas.
ici c'est:
$output = preg_replace('/[aeiou]/', '[aeiou]?', $input);
Vous pourrez peut-être obtenir Preg_replace de gérer cela pour vous (voir les réponses de Thax, Emil, etc.).
Sinon, si cela est trop compliqué, vous pouvez vous permettre, tokenize:
Je recommande d'éviter les fonctions de préglike et à l'aide de Cette fonction native p> code: p> strtr () code>.
Commentaire de Yoyoma: "Apparemment, certains ont manqué cet avertissement @ US3.php.net /manual/fr/funccunction.str-replace.php Commande de remplacement GOTCHA car str_replace () remplace de gauche à droite, il peut remplacer une valeur précédemment insérée lors de plusieurs remplacements. Voir aussi les exemples de ce document. Autres ont répondu à la question avec des solutions possibles au problème. C'est pourquoi le problème se produit. "
@powtac le but est "BL [Aoieu]? Ck" C'est une bonne question!