我有以下示例文本,我想替换'[core]。与其他东西但我只想在不在文本标记之间替换它(SQL):
PRINT'[core]的结果。[dbo]。[FunctionX]'+ [core]。[dbo]。[FunctionX] +'。'
EXECUTE [core]。[dbo]。[FunctionX]
结果应该是:
PRINT'[core]的结果。[dbo]。[FunctionX]'+ [extended]。[dbo]。[FunctionX] +'。'
EXECUTE [extended]。[dbo]。[FunctionX]
我希望有人能理解这一点。这可以通过正则表达式解决吗?
使用RegLove
凯文
答案 0 :(得分:0)
不是一步,而是普通的文本编辑器。如果您的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.
答案 1 :(得分:0)