用preg_replace()替换已弃用的ereg_replace()不起作用

时间:2012-03-16 17:21:24

标签: php deprecated

以下PHP程序替换符号!£$%^& with nulls

 <?php

 $string = "This is some text and numbers 12345 and symbols !£$%^&";
 $new_string = ereg_replace("[^A-Za-z0-9 (),.]", "", $string);
 echo "Old string is: ".$string."<br />New string is: ".$new_string;

 ?>

输出:

旧字符串是:这是一些文字和数字12345和符号!£$%^&amp;
新字符串是:这是一些文本和数字12345和符号

但是,我已经了解到函数ereg_replace()已被弃用,我应该使用函数preg_replace()代替。我做了这样的替换:

 <?php

 $string = "This is some text and numbers 12345 and symbols !£$%^&";
 $new_string = preg_replace("[^A-Za-z0-9 (),.]", "", $string);
 echo "Old string is: ".$string."<br />New string is: ".$new_string;

 ?>

但输出错误:

旧字符串是:这是一些文字和数字12345和符号!£$%^&amp; 新字符串是:这是一些文本和数字12345和符号!£$%^&amp;

我做错了什么?我该如何解决?

2 个答案:

答案 0 :(得分:4)

您似乎缺少正则表达式周围的标记。试试这个(注意图案周围的斜线)。

$string = "This is some text and numbers 12345 and symbols !$%^&";
$new_string = preg_replace("/[^A-Za-z0-9 (),.]/", "", $string);
echo "Old string is: ".$string."<br />New string is: ".$new_string;

只要在两侧都找到相同的标记,就可以使用任何字符作为标记。如果您的模式匹配/个字符,则非常有用。所以这也是有效的:

$string = "This is some text and numbers 12345 and symbols !$%^&";
$new_string = preg_replace("~[^A-Za-z0-9 (),.]~", "", $string);
echo "Old string is: ".$string."<br />New string is: ".$new_string;

答案 1 :(得分:-2)

这也是我经历过的一个奇怪的错误。由于某种原因,空引号搞砸了这个功能,但我通过使用

让它工作
preg_replace($pattern, NULL, $string);

而不是

preg_replace($pattern, "", $string);