PHP替换反引号中的点

时间:2017-05-01 21:21:12

标签: php sql rename batch-processing

我有一个项目需要修改数据库中很多表的表名,因此需要修改很多SQL查询。

现在我的桌子都有1.customers,2.customers等名字 我需要将这些更新为1_customer,2_customers等。

是否可以通过preg_replace用下划线替换反引号中的所有点

例如我想要

"UPDATE `1.customers` SET `value` = '1.0'"

成为

"UPDATE `1_customers` SET `value` = '1.0'"

总共约有50张桌子。

2 个答案:

答案 0 :(得分:1)

使用下划线替换反引号中的所有点

$input = "UPDATE `1.customers` SET `value` = '1.0'";

$output = preg_replace_callback(
  '/`(.+?)`/',
  function ($matches) {
    return str_replace('.', '_', $matches[0]);
  },
  $input
);

<强> $输出

UPDATE `1_customers` SET `value` = '1.0'

答案 1 :(得分:0)

使用正则表达式中的捕获组来匹配点前后的部分,以便将它们复制到替换中。

$str = preg_replace_callback('/(`\d+)\.(\w+`)/', '$1_$2', $str);

这假设每个名字中只有一个点。如果没有,您可以使用preg_replace_callback()将名称与任意数量的点匹配,然后在回调函数中使用str_replace()替换所有带下划线的点。