Comment puis-je remplacer certaines pièces de ma chaîne?
Comment puis-je remplacer une partie de ma chaîne avec un autre?
Chaîne d'entrée:
"Hello, my name is Santa"
Comment puis-je changer tous les a
's dans mon string avec quelque chose d'autre?
Je pense que j'ai besoin d'un foreach
boucle, mais je n'en suis pas sûr comment l'utiliser.
- le droit.. et il devrait le premier résultat aussi 🙂
- Aussi, la désapprobation de la
ereg_
de la famille ne signifie pas que vous ne pouvez pas utiliser les regex en PHP. Il y a le PCRE (preg_
) de la famille. Les petites différences ne doit pas vous éloigner de l'utiliser. - Tout le monde ne trouve manuels attrayant. Bien que les chances sont que c'est un doublon d'un milliard de questions sur stackoverflow, ce n'est pas une mauvaise question pour un Q&Un site, non?
- Quand je peux (littéralement) copier/coller de la question du titre dans Google et obtenir des résultats définitifs, je dirais que l'OP n'a pas encore épuisé ses ressources. Dans un sens, c'est mauvais pour le site pour avoir plus d'encombrement (en double des questions qui sont facilement répondu en recherche simple), mais d'un autre côté c'est potentiellement bon pour le prochain gars qui fait de faire un peu de recherche (plus de résultats). Alors que le manuel PHP ne peut pas être "séduisante", c'est certainement une autorité, et le premier endroit que vous devriez vérifier pour de simples questions de ce genre. Je vois que mon commentaire a disparu, mais il contenait un lien précieux.
Vous devez vous connecter pour publier un commentaire.
Ou pour répondre à votre question plus précisément:
De recherche & Remplacer
Il y a quelques différentes fonctions/méthodes pour remplacer une partie d'une chaîne avec quelque chose d'autre, tous avec leurs propres avantages.
str_replace()
méthode (binaire coffre-fort, sensible à la casse)Arguments
str_replace()
a 3 arguments requis comme vous pouvez le voir dans la définition ci-dessus avec le bon de commande, qui peuvent prendre une corde et un tableau comme argument!De recherche & Remplacer
de recherche(string) ET replace(string) → Remplace la recherche de la chaîne avec la chaîne de remplacement.
de recherche(array) ET replace(string) → Remplace tous les éléments de recherche avec la chaîne de remplacement.
de recherche(chaîne de caractères) ET de le remplacer(array) → vous Jette un avis: "Avis: Tableau de conversion de chaîne de caractères", en raison d'un remplacement de tableau pour une chaîne de recherche ne fait pas de sens, de sorte qu'il essaie pour convertir le tableau en une chaîne.
de recherche(array) ET de le remplacer(array) → Remplace chaque élément correspondant à remplacer l'élément (les Touches sont ignorés!).
de recherche(plusieurs éléments) ET de le remplacer(moins d'éléments) → Remplace chaque élément correspondant à remplacer l'élément (Pour le manque de remplacer les éléments d'une chaîne vide sera utilisé).
de recherche(moins d'éléments) ET de le remplacer(plusieurs éléments) → Remplace chaque élément correspondant à remplacer l'élément (Inutile de remplacer les éléments sont ignorés).
Sujet
sujet(string) → Remplacement est effectué pour la chaîne.
sujet(array) → Remplacement est effectué pour chaque élément du tableau.
Code
Sortie
Notes
Gotcha!
Important de savoir, c'est que
str_replace()
œuvres de gauche à droite du tableau. Cela signifie qu'il peut possible de remplacer une valeur que l'on a déjà remplacé. Par exemple:Casse
Si vous voulez faire de la recherche insensible à la casse, vous pouvez utiliser
str_ireplace()
(Avis de l'i
pourjensensitive).Tableau multidimensionnel
str_replace()
/str_ireplace()
ne fonctionne PAS pour les tableaux multidimensionnels. Voir ce manuel de commentaire une telle mise en œuvre. Bien sûr, vous pouvez également remplacerstr_replace()
avecstr_ireplace()
pour la casse.Si vous voulez mettre le tout ensemble et de créer une fonction qui fonctionne également pour les tableaux multidimensionnels de la casse, vous pouvez faire quelque chose comme ceci:
JS:
strtr()
méthode (50% binaire coffre-fort, sensible à la casse)Arguments
La fonction prend 3 arguments avec une de et string ou il prend 2 arguments avec un remplacement de tableau
array("search" => "replace" /* , ... */)
, dont vous pouvez voir dans la définition ci-dessus avec le bon de commande.2 Arguments
Il commence à remplacer la plus longue de la clé avec la valeur correspondante, et ce, jusqu'à remplacer tous les
key => value
paires. Dans ce cas, la fonction est binaire sûr, car il utilise la totalité de la clé/valeur.3 Arguments
Il remplace, à partir de l'argument avec l'argument dans le sujet octet par octet. Donc, il n'est pas binaire sûr!
Si la forme et les arguments sont de longueur inégale, le remplacement s'arrête quand il atteint la fin de la chaîne plus courte.
Sujet
Qu'il n'accepte pas un tableau en tant que sujet, juste une chaîne de caractères.
Code
Sortie
Notes
Gotcha!
Opposition à
str_replace()
,strtr()
ne remplace PAS deux fois la même chose. À titre d'exemple:Aussi, si vous souhaitez remplacer plusieurs choses avec la même chaîne de caractères que vous pouvez utiliser
array_fill_keys()
pour remplir votre remplacement de tableau avec la valeur.Casse
strtr()
n'est PAS sensible à la casse, NI est-il pas sensible à la casse fonction équivalente. Voir ce manuel de commentaire pour la casse mise en œuvre.Tableau multidimensionnel
strtr()
n'opposition àstr_replace()
PAS travailler avec des tableaux en tant que sujet, de sorte qu'il ne fonctionne PAS avec les tableaux multidimensionnels. Vous pouvez bien sur utiliser le code ci-dessus à partir destr_replace()
pour les tableaux multidimensionnels et simplement l'utiliser avecstrtr()
ou la mise en œuvre destritr()
.Si vous voulez mettre le tout ensemble et de créer une fonction qui fonctionne également pour les tableaux multidimensionnels de la casse, vous pouvez faire quelque chose comme ceci:
JS:
preg_replace()
méthode (binaire coffre-fort, sensible à la casse)Arguments
preg_replace()
a 3 paramètres requis dans l'ordre indiqué ci-dessus. Maintenant, tous les 3 d'entre eux peuvent prendre une corde et un tableau comme argument!De recherche & Remplacer
de recherche(string) ET replace(string) → Remplace toutes les correspondances de la recherche regex avec la chaîne de remplacement.
de recherche(array) ET replace(string) → Remplace toutes les correspondances de chaque recherche regex avec la chaîne de remplacement.
de recherche(chaîne de caractères) ET de le remplacer(array) → vous Jette un avertissement: "Attention: preg_replace(): l'incompatibilité de Paramètre, le motif est une chaîne de caractères alors que le remplacement est un tableau", en raison d'un remplacement de tableau pour une recherche d'expression régulière ne fait pas de sens.
de recherche(array) ET de le remplacer(array) → Remplace toutes les correspondances de chaque recherche regex avec le correspondant de remplacer l'élément(les Touches sont ignorés!).
de recherche(plusieurs éléments) ET de le remplacer(moins d'éléments) → Remplace toutes les correspondances de chaque recherche regex avec le correspondant de remplacer l'élément(Pour le manque de remplacer les éléments d'une chaîne vide sera utilisé).
de recherche(moins d'éléments) ET de le remplacer(plusieurs éléments) → Remplace toutes les correspondances de chaque recherche regex avec le correspondant de remplacer l'élément(Inutile de remplacer les éléments sont ignorés).
Sujet
sujet(string) → Remplacement est effectué pour la chaîne.
sujet(array) → Remplacement est effectué pour chaque élément du tableau.
Veuillez noter encore: La recherche doit être une expression régulière! Cela signifie qu'il doit séparateurs et les caractères spéciaux doivent être échappés.
Code
Sortie
Notes
Gotcha!
Même que
str_replace()
,preg_replace()
œuvres de gauche à droite du tableau. Cela signifie qu'il peut possible de remplacer une valeur que l'on a déjà remplacé. Par exemple:Casse
Puisque la recherche argument est une expression régulière, vous pouvez tout simplement passer le
drapeau i
pour la casse de la recherche.Tableau multidimensionnel
preg_replace()
ne fonctionne PAS pour les tableaux multidimensionnels.Backreference
Être conscient que vous pouvez utiliser
\\n
/$n
comme la référence arrière de votre capture des groupes de la regex. Où0
est le match en entier et1-99
pour votre capture des groupes.Également si la référence arrière est immédiatement suivi d'un numéro que vous avez à utiliser
\${n}
./Remplacement de "Le modificateur /e est obsolète"
Le remplacement, dans
preg_replace()
ne pouvez pas utiliser les fonctions de rappel de remplacement. Donc, vous avez à utiliserla fonction preg_replace_callback()
. Même lorsque vous utilisez le modificateure
et obtenir "Obsolète: preg_replace(): Le modificateur /e est obsolète, utilisez la fonction preg_replace_callback à la place". Voir: Remplacer preg_replace() e touche de modification avec la fonction preg_replace_callbackSi vous voulez mettre le tout ensemble et de créer une fonction qui fonctionne également pour les tableaux multidimensionnels de la casse, vous pouvez faire quelque chose comme ceci:
JS:
Boucles
while
/for
/foreach
méthode (PAS de binaire coffre-fort, sensible à la casse)Maintenant, bien sûr, en plus de toutes ces fonctions, vous pouvez également utiliser une simple boucle pour boucle à travers la chaîne et de remplacer chaque
search => replace
paire qui vous avez.Mais cela devient plus complexe lorsque vous le faites binaire coffre-fort, insensible à la casse et pour les tableaux multidimensionnels que de simplement en utilisant les fonctions ci-dessus. Donc je ne comprend pas les exemples ici.
Cordes
Dès maintenant toutes les méthodes indiquées ci-dessus ne le remplacement sur l'ensemble de la chaîne. Mais parfois, vous voulez remplacer quelque chose seulement pour une certaine partie de votre chaîne.
Pour cela, vous voulez probablement/peut utiliser
substr_replace()
. Ou une autre méthode consiste à utilisersubstr()
et appliquer le remplacement uniquement sur la sous-chaîne et de mettre de la chaîne d'ensemble par la suite. Bien sûr, vous pouvez également modifier votre regex ou de faire autre chose pour ne pas appliquer le remplacement de l'ensemble de la chaîne.str_replace est suffisant pour un simple remplacement des emplois (telles que le remplacement d'une seule lettre), mais l'utilisation de preg_replace est généralement conseillé (si vous voulez quelque chose de plus ou flexible, polyvalent), car il est flexible et polyvalent. Et comme le 'a' est juste un exemple...:
Ou si vous souhaitez que plusieurs remplacements à la fois:
preg_replace peut, malheureusement, être assez difficile à utiliser. Je recommande ce qui suit se lit comme suit:
http://php.net/manual/en/function.preg-replace.php
http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html
Aussi, si vous décidez d'utiliser str_replace(), et que votre remplacement doit être sensible à la casse, vous allez avoir besoin d'str_ireplace().
Cela peut fonctionner aussi sans de de PHP les fonctions de chaîne, ici le changement de votre " a " à "& " esperluette:
Utiliser la fonction preg_replace()