PHP preg_replace没有替换模式

时间:2015-10-25 10:44:45

标签: php regex preg-replace

我想从查询字符串中 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 个答案:

答案 0 :(得分:1)

嗯,确实如此,但你在使用双引号字符串替换参数时犯了一个常见的错误。您必须记住,双引号字符串会导致字符串插值,并且在那里${2},PHP会在将参数值发送到$2之前尝试查找名为preg_replace的变量。 Turning up error_reporting would reveal this upon inspecting your error logs

只需将preg_replace("/(['])(to_date[(].*[)])(['])/i", "${2}", $query);替换为preg_replace("/(['])(to_date[(].*[)])(['])/i", '$2', $query);,一切顺利,或者您可以选择使用更优惠的\\2进行替换,这就是我的目标。

另请注意,您在技术上甚至不需要正则表达式。您可以使用substr($query, 1, -1);

答案 1 :(得分:-2)

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