pas en une seule étape, et non dans un éditeur de texte ordinaire. Si votre SQL est syntaxiquement valide, vous pouvez faire quelque chose comme ceci:
D'abord, vous supprimez toutes les chaînes du SQL et les remplacez par des espaces réservés. Ensuite, vous faites votre remplacement de [core]
avec autre chose. Ensuite, vous restaurer le texte dans les espaces réservés de la première étape:
- Trouver toutes les occurrences de
'(?:''|[^'])+'
avec 'n'
, où n
est un numéro d'index (le numéro du match). Stockez les correspondances dans un tableau portant le même numéro que n
. Cela supprimera toutes les chaînes SQL de l'entrée et les échangera contre des remplacements sans danger sans invalider le SQL lui-même.
- Remplacez-le par
[core]
. Aucune regex requise, la recherche et le remplacement normaux suffisent ici.
- Itérer le tableau en remplaçant l'espace réservé
'1'
par le premier élément du tableau, '2'
par le second, jusqu'à n
. Vous avez maintenant restauré les chaînes d'origine.
Le regex, a expliqué:
' # 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 cela ressemblerait à quelque chose comme ceci:
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.
"' PRINT 'Le résultat de' '[core]. [Dbo]. [FunctionX]' '' + [noyau]. [Dbo]. [FunctionX] + '.' EXECUTE [noyau]. [Dbo]. [FonctionX] '"? – Tomalak
Avez-vous pris la peine de cliquer sur le lien? Parce que je ne sais pas d'où vous copiez votre sortie de ... Il y a un exemple de travail. Allez le voir. – galambalazs
Avez-vous pris la peine d'essayer avec la chaîne que j'ai posté? ;-) Parce que cela ne fonctionne pas cette chaîne. – Tomalak