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", "", $query);

$query 的值必须更改为:

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

当前输出:

Empty String ""
$query=substr(substr($query,1),0,-1);

嗯,确实如此,但是您在使用双引号字符串作为替换参数时犯了一个常见错误。您必须记住,双引号字符串会导致字符串插值,并且在 </code> 那里,PHP 会在将参数值发送到 [= 之前​​尝试查找名为 <code> 的变量12=]。 Turning up error_reporting would reveal this upon inspecting your error logs.

只需将 preg_replace("/(['])(to_date[(].*[)])(['])/i", "", $query); 替换为 preg_replace("/(['])(to_date[(].*[)])(['])/i", '', $query); 就可以了,或者您可以选择使用更有利的 \2 进行替换,这就是我想要的。

另请注意,从技术上讲,您实际上什至不需要正则表达式。您仍然可以使用 substr($query, 1, -1);