我有一个项目需要修改数据库中很多表的表名,因此需要修改很多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张桌子。
答案 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()
替换所有带下划线的点。