2009-10-05 9 views
0

Je suis en train d'écrire un peu d'aide SQL. J'ai une requête comme celle stockée dans une chaîne:RegEx recherche de deux chaînes de modèle et couper ce qui est entre

DECLARE @V1 INT 

--ignore 
DECLARE @V11 INT 
DECLARE @V12 INT 
--endignore 

DECLARE @V2 INT 

--ignore 
SELECT * FROM SampleTable 
INNER JOIN AnotherSampleTable 
...... 
--endignore 

SELECT * From Employee ORDER BY LastName 

Ma méthode d'aide doit couper tout ce qui est entre

--ignore 

et

--endignore 

La chaîne de résultat devrait ressembler à:

DECLARE @V1 INT 

DECLARE @V2 INT 


SELECT * From Employee ORDER BY LastName 

Comment atteindre mon résultat avec RegEx?

Répondre

3

Voici un court exemple:

using System; 
using System.Text.RegularExpressions; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     string x = @" 
A 
--ignore 
B 
--endignore 
C"; 
     Regex regex = new Regex("\r\n--ignore.*?\r\n--endignore\r\n", 
           RegexOptions.Singleline); 
     string y = regex.Replace(x, "\r\n"); 
     Console.WriteLine(y); 
    } 
} 

Notez l'utilisation de RegexOptions.Singleline de sorte que . correspond à tout caractère, y compris \n.

J'ai utilisé des séparateurs de ligne Windows ici, mais vous pouvez rendre les retours chariot facultatifs si vous voulez pouvoir gérer les séparateurs Unix. Je voulais m'assurer que les jetons étaient sur leurs propres lignes pour éviter toute référence malveillante au sein du SQL, même si c'est très improbable.

+0

Merci pour votre aide. J'ai toujours un problème s'il y a plus d'un bloc --ignore/- endignore. – gsharp

+0

Oups, oui. Correction maintenant pour rendre le '. *' Réticent. –

+0

Qu'en est-il de Environment.NewLine? –

1

Faites correspondre votre chaîne "--ignore. + - endignore" et utilisez string.replace pour la remplacer par string.empty.

+0

pouvez-vous poster un petit exemple de code si cela ne vous dérange pas. Je vous remercie. – gsharp

Questions connexes