PHP preg_replace不替换模式


PHP preg_replace not replacing the pattern

我想在查询字符串中从to_date函数的开始和结束处删除单引号(')。

$query = "'to_date('20-Jan-1970 4:00 AM','DD-MON-YYYY HH:MI AM')'";

下面的模式查找字符串,但不替换它:

$query = preg_replace("/(['])(to_date[(].*[)])(['])/i", "${2}", $query);

$query的值必须更改为:

to_date('20-Jan-1970 4:00 AM','DD-MON-YYYY HH:MI AM')
当前输出:

Empty String ""

确实如此,但是您犯了一个常见的错误,使用双引号字符串作为替换参数。你必须记住,双引号字符串导致字符串插值,在你有${2}的地方,PHP试图寻找一个名为$2的变量,甚至在它发送参数值给preg_replace之前。打开error_reporting会在检查错误日志时显示这一点。

简单地用preg_replace("/(['])(to_date[(].*[)])(['])/i", '$2', $query);替换preg_replace("/(['])(to_date[(].*[)])(['])/i", "${2}", $query);,一切都很好,或者你可以选择使用更有利的''2来替换,这就是我所选择的。

还要注意,从技术上讲,您甚至不需要为此使用正则表达式。你也可以用substr($query, 1, -1);

$query=substr(substr($query,1),0,-1);