2010-09-06 8 views

Répondre

21

Pour le port ereg_replace à preg_replace vous devez mettre l'expression régulière entre une paire de delimiter

Aussi votre REGX est [\] est invalide à utiliser pour preg_replace comme \ est Echapper à la fermeture char class ]

Le port correct est

preg_replace('/[\\\]/','',$theData) 

En outre, depuis la classe char a juste un caractère il n'y a pas besoin réel de la classe char, vous pouvez simplement dire:

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

Puisque vous remplacez un seul char, utilisant l'expression rationnelle pour ce n'est pas recommandé . Vous devez utiliser un simple remplacement de texte à l'aide str_replace comme:

str_replace('\\','',$data); 
+1

. '/ \\\ /' mènera à l'échappement de la barre oblique par preg_replace, vous aurez besoin de 4 barres obliques inverses –

+3

@Yanick juste essayez-le –

+0

@Yanick, non ça ne sera pas le cas. 'preg_replace' le voit comme/\\ /, qu'il décode comme un antislash littéral dans les délimiteurs Notez que '/ \\\\ /' est * aussi * correct, car \\ et \ peuvent tous les deux encoder une barre oblique inversée dans un littéral de chaîne. t \/n'est pas une chaine d'échappement. –

2
str_replace("\\","",$theData); 

Mais je doute sérieusement que vous devez remplacer tout. vous avez probablement besoin d'une autre opération.
À quoi sert ce remplacement?

0
preg_replace("/\\\/", "", $theData); 
0

J'ai utilisé cette sed pour remplacer automatiquement ereg_replace par preg_replace et mettre les barres obliques nécessaires dans Suppose pas \ » dans la première regex

sed -i 's#ereg_replace("\([^"]*\)"#preg_replace("/\1/"#g' *.php