2009-11-14 8 views
2

Je veux faire écho à une chaîne avec la variable à l'intérieur, y compris la ($) comme ceci:PHP texte preg_replace variables

echo "$string"; 

Je ne veux pas qu'il écho la variable de chaîne, je veux qu'il echo « $ chaîne 'elle-même, et non le contenu d'une variable. Je sais que je peux le faire en ajoutant un '\' devant le ($), mais je veux utiliser preg_replace pour le faire. J'ai essayé et cela ne fonctionne pas:

$new = preg_replace("/\$/","\\$",$text); 

Répondre

7

Utilisez single quotes pour votre déclaration de chaîne:

echo '$string'; 

variables à l'intérieur des guillemets simples ne s'élargis pas:

Note: Contrairement à la deux autres syntaxes, variables et des séquences d'échappement pour les caractères spéciaux être élargi quand ils se produisent dans un devis simple strings.

Une autre solution serait d'échapper à la $ comme vous l'avez déjà fait appel dans le preg_replace:

echo "\$string"; 
+0

haha ​​wow merci – David

1

Si je comprends bien votre question, vous ne pouvez pas utiliser preg_replace pour faire ce que vous voulez. preg_replace obtient ses arguments après la substitution de variables a lieu.

Donc, soit il n'y a rien pour preg_replace à remplacer (car la substitution déjà eu lieu), ou il n'y a pas besoin de faire quoi que ce soit à preg_replace (parce que le signe dollar était déjà échappé).

0

Comme vous l'avez observé, le $ est traité pour l'interpolation variable à l'intérieur des chaînes entre guillemets doubles. Donc, votre modèle regex devrait être construit en utilisant des chaînes entre guillemets. En outre, le $ est un caractère spécial à l'intérieur de la chaîne regex de remplacement, vous devez donc échapper supplémentaire:

preg_replace('/\$/', '\\\\$', $text) 

Mais il n'y a pas besoin de la fonction preg_ ici. str_replace devrait le faire:

str_replace('$', '\\$', $text) 

Cela pourrait éclaircir les choses pour vous, mais comme Gumbo suggère: pourquoi ne pas utiliser des guillemets simples pour faire écho?

0

Eh bien, je pense que vous voulez supprimer le texte qui existe dans certaines variables. Alors vous pouvez le faire comme

$foo = '123'; 
$bar = 'bqwe';      
$str= preg_replace("/".$foo ."/", '', $str, 1); 
$str= preg_replace("/".$bar ."/", '', $str, 1);