我想在查询字符串中从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);