У меня есть проект, в котором мне нужно изменить имена таблиц множества таблиц в моей базе данных и, следовательно, множество запросов 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 таблиц.
Заменяет все точки в кавычках подчеркиванием
$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'
Используйте группы захвата в регулярном выражении, чтобы соответствовать частям до и после точки, чтобы вы могли скопировать их в замену.
$str = preg_replace_callback('/(`\d+)\.(\w+`)/', '$1_$2', $str);
Это предполагает, что есть только одна точка в каждом имени. Если нет, вы можете использовать preg_replace_callback()
сопоставить имя с любым количеством точек, а затем использовать str_replace()
в функции обратного вызова, чтобы заменить все точки подчеркиванием.