6
votes

php str_replace se remplaçant

J'ai besoin de remplacer chaque occurrence de l'une des lettres A , o , i , e , u avec [Aoieu]?

J'ai essayé de faire ce qui suit: xxx

mais lorsque vous lui donnez une entrée de noir au lieu de me donner l'attendu bl [AOIEU]? CK Cela m'a donné xxx

Comment puis-je le faire ne pas remplacer les choses qu'il est déjà remplacée?


2 commentaires

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!


7 Réponses :


3
votes

Vous voudrez peut-être essayer ce xxx


0 commentaires

3
votes

extrait de la documentation:

ordre de remplacement gotcha

car str_replace () remplace de gauche à droite, cela pourrait remplacer un valeur précédemment insérée lors de plusieurs remplacements.


0 commentaires

5
votes

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: xxx

ou votre propre fonction (notez que $ Recherche ne peut être qu'un seul char ou une gamme de caractères, pas de chaînes - vous pouvez utiliser Stros ou similaire à la construction, qui gère également des chaînes plus longues): xxx


4 commentaires

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]?'?



0
votes
$input = str_replace(array('a', 'o', 'i', 'e', 'u'),   '~',          $input);
$input = str_replace('~',                              '[aoieu]?',   $input);

4 commentaires

Échoue lorsque vous avez un ~ 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 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 ¯ ou œ 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.



0
votes

ici c'est:

$output = preg_replace('/[aeiou]/', '[aeiou]?', $input);


0 commentaires

0
votes

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: xxx


0 commentaires

3
votes

Je recommande d'éviter les fonctions de préglike et à l'aide de strtr () .

Cette fonction native

  • fait un seul passage sur la chaîne d'entrée,
  • ne remplace pas les remplaçants et
  • trouve la sous-chaîne correspondante la plus longue à remplacer (lorsqu'une chaîne de qualification est trouvée dans une autre chaîne de qualification)

    code: xxx


0 commentaires