2009-07-31 5 views
0

J'ai une chaîne Action - [N] ew, [U] pdate, ou [D] elete: N que je dois remplacer par "Action - [N] ew, [U] pdate, ou [D] elete: U "en quelque sorte en utilisant preg_replace je ne peux pas le faire fonctionner. Cela reste le même.Remplacer une chaîne de texte avec une autre chaîne en utilisant preg_replace

Mon code ressemble à ceci

$action = Action - '[N]ew, [U]pdate, or [D]elete : U'; 
$line = preg_replace("/(Action - [N]ew, [U]pdate, or [D]elete : N)/",$action,$line); 

Répondre

3

[ et ] sont des caractères spéciaux dans les expressions régulières. Vous devrez leur échapper si vous voulez faire correspondre:

"/(Action - \[N\]ew, \[U\]pdate, or \[D\]elete : N)/" 

Sans être échappé, et d'expression au sein [ et ] correspondra à un de chaque personnage en leur sein. Donc, dans votre cas d'origine, "[N]ew" correspondait "New". Si cela avait été "[NP]ew", cela aurait correspondu "New" ou "Pew".

+0

Thx, c'était en fait facile, je devais savoir que trop de codage pour une journée ;-) – Roland

0

essayer d'échapper à la '[' et ']'

2

Vous n'avez pas besoin preg_replace de le faire. Un str_replace simple, suffira:

$action = 'Action - [N]ew, [U]pdate, or [D]elete : U'; 
$line = str_replace('Action - [N]ew, [U]pdate, or [D]elete : N', $action, $line); 
+0

+ 1 pour une alternative, une solution plus simple. Je laisserai ma réponse au cas où son exemple serait juste une simplification. – Welbog

2

problèmes de couple:

1) Erreur de syntaxe dans votre première ligne. Vos citations sont mal placées. Il devrait être:

$action = "Action - [N]ew, [U]pdate, or [D]elete : N"; 

2) Vous devez échapper aux crochets ([ et ]) dans les expressions régulières. Sinon, vous pouvez le faire:

$line = preg_replace("/N$/", "U", $action); 

donc en les combinant:

$action = "Action - [N]ew, [U]pdate, or [D]elete : N"; 
$line = preg_replace("/N$/", "U", $action); 
Questions connexes