Ни в один шаг, и не в обычном текстовом редакторе.Если ваш SQL синтаксически допустим, вы можете сделать что-то вроде этого:
Сначала вы удалите каждую строку из SQL и замените ее заполнителями.Затем вы заменяете [core]
чем-то другим.Затем вы восстанавливаете текст в заполнителях с первого шага:
- Найдите все вхождения
'(?:''|[^'])+'
с 'n'
, где n
- индексный номер (номер совпадения).Сохраните совпадения в массиве с тем же номером, что и n
.Это удалит все строки SQL из входных данных и заменит их для безвредных замен без аннулирования самого SQL. - Замените
[core]
.Регулярное выражение не требуется, здесь достаточно обычного поиска и замены. - Итерируйте массив, заменив заполнитель
'1'
на первый элемент массива, '2'
на второй, до n
.Теперь вы восстановили исходные строки.
Регулярное выражение объяснило:
' # a single quote
(?: # begin non-capturing group
''|[^'] # either two single quotes, or anything but a single quote
)+ # end group, repeat at least once
' # a single quote
JavaScript это будет выглядеть примерно так:
var sql = 'your long SQL code';
var str = [];
// step 1 - remove everything that looks like an SQL string
var newSql = sql.replace(/'(?:''|[^'])+'/g, function(m) {
str.push(m);
return "'"+(str.length-1)+"'";
});
// step 2 - actual replacement (JavaScript replace is regex-only)
newSql = newSql.replace(/\[core\]/g, "[new-core]");
// step 3 - restore all original strings
for (var i=0; i<str.length; i++){
newSql = newSql.replace("'"+i+"'", str[i]);
}
// done.