3 votes

ajouter et précéder du texte à une chaîne

Je veux pouvoir rechercher un certain mot dans une chaîne de caractères, et ajouter et précéder des caractères à chaque occurrence de ce mot.

exemple :

I like cats, cats are awesome! I wish I had cats!

devient :

I like (cats), (cats) are awesome! I wish I had (cats)!

Je sais que je pourrais utiliser

str_replace( 'cats', '(cats)', $string );

mais je devrais écrire "chats" deux fois. Je veux une méthode qui ne me demande de l'écrire qu'une seule fois.

8voto

Tim Cooper Points 55292
$search = 'cats';
preg_replace('/' . preg_quote($search, '/') . '/', '($0)', $string);

Paraphrase du preg_replace documentation :

La chaîne de remplacement peut contenir des références de la forme $n . Chacune de ces références sera remplacée par le texte saisi par le nième motif entre parenthèses. $0 fait référence au texte correspondant à l'ensemble du modèle.

6voto

Andrew Hall Points 2016

Utiliser un preg_replace() avec des références arrière : http://php.net/manual/en/function.preg-replace.php

preg_replace("/cats/smi","($0)",$string);

1voto

Jonathan M Points 9304

Vous avez commenté :

J'ai une énorme liste de valeurs en texte brut que je dois mettre entre parenthèses, et je et je voulais rendre l'écriture du code plus facile.

Puisque vous allez effectuer de nombreux remplacements (coûteux en CPU), et que vous souhaitez simplement réduire votre temps de codage, pourquoi ne pas économiser du CPU en enveloppant les données dans un fichier de type str_replace() ?

function str_wrap($needle,$prefix,$suffix,$haystack) {
    return str_replace($needle, $prefix . $needle . $suffix, $haystack);
}

Par le Manuel PHP :

Si vous n'avez pas besoin de règles de remplacement sophistiquées (comme les expressions régulières), vous devriez toujours utiliser [str_replace()] au lieu de preg_replace().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X