Вы можете сопоставить имена таблиц с /\bsite_[a-zA-Z]*/
.Если они содержат числа, вы также должны сопоставить их с /\bsite_[a-zA-Z0-9]*/
.
. Затем вы можете заменить его новой строкой:
<?php
$string = 'SELECT * FROM site_customers LEFT JOIN site_products';
$pattern = '/\bsite_[a-zA-Z0-9]*/';
$replacement = '$0_02';
echo preg_replace($pattern, $replacement, $string);
Это создаст угрозу site_customers
и site_products
то же самое.К обоим будет добавлен _02
.
Пример на 3v4l: https://3v4l.org/Ti7n4
Вы также можете угрожать первой и второй таблицам по отдельности, но вам нужно знать весь запрос:
<?php
$string = 'SELECT * FROM site_customers LEFT JOIN site_products';
$pattern = '/SELECT \* FROM (\bsite_[a-zA-Z0-9]*) LEFT JOIN (\bsite_[a-zA-Z0-9]*)/';
$replacement = 'SELECT * FROM $1_02 LEFT JOIN new_$2';
echo preg_replace($pattern, $replacement, $string);
Пример на 3v4l: https://3v4l.org/0YorR
Вы также можете извлечь слова типа site_
и позже заменить их:
<?php
$re = '/\bsite_[a-zA-Z0-9]*/';
$query = 'SELECT * FROM site_customers LEFT JOIN site_products';
preg_match_all($re, $query, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
// Replace old tables with new ones
$old = [
$matches[0][0], // First table name
$matches[1][0], // Second table name
];
$new = [
$matches[0][0] . '_02', // Append _02
'new_' . $matches[1][0], // Prepand new_
];
$query = str_replace($old, $new, $query);
// Print the new query
echo $query;
Пример на3v4l: https://3v4l.org/BMpPR