Regulärer Ausdruck zur Übereinstimmung aller Kommentare in einem T-SQL-Skript

8

Ich brauche einen regulären Ausdruck, um ALLE Kommentare in einem T-SQL-Block zu erfassen. Der Ausdruck muss mit der .Net Regex-Klasse arbeiten.

Sagen wir, ich habe das folgende T-SQL:

%Vor%

Ich muss alle Kommentare aufnehmen, einschließlich der mehrzeiligen Kommentare, damit ich sie entfernen kann.

BEARBEITEN: Es würde dem gleichen Zweck dienen, einen Ausdruck zu haben, der alles außer den Kommentaren aufnimmt.

    
Eric Burcham 07.10.2011, 16:51
quelle

7 Antworten

16

Das sollte funktionieren:

%Vor%     
Jeremy 07.10.2011, 17:31
quelle
7

In PHP benutze ich diesen Code, um SQL auskommentieren (das ist die kommentierte Version - & gt; x Modifikator):

%Vor%

Kurze Version:

%Vor%     
Adrien Gibrat 11.12.2012 14:35
quelle
4

Mit diesem Code:

%Vor%

Mit der folgenden Eingabe:

%Vor%

Erzeugt diese Treffer:

%Vor%

Nicht, dass dies nur zwei Ebenen von verschachtelten Kommentaren entspricht, obwohl ich in meinem Leben noch nie mehr als eine Ebene benutzt habe. Immer.

    
FailedDev 07.10.2011 17:40
quelle
3

Ich habe diese Funktion gemacht, die alle SQL-Kommentare entfernt, mit einfachen regulären expressons . Es entfernt sowohl Zeilenkommentare (auch wenn kein Zeilenumbruch stattfindet) als auch Kommentare blockieren (selbst wenn es verschachtelte Blockkommentare gibt). Diese Funktion kann auch Literale ersetzen (nützlich, wenn Sie nach etwas innerhalb von SQL-Prozeduren suchen, aber Zeichenfolgen ignorieren möchten).

Mein Code basiert auf dieser Antwort (die sich auf C # -Kommentare bezieht), daher musste ich die Zeilenkommentare ändern "//" zu "-", aber noch wichtiger, ich musste die Blockkommentare regex (mit Auswuchtgruppen ) neu schreiben, weil SQL verschachtelte Blockkommentare erlaubt , während C # doesn t.

Außerdem habe ich dieses Argument " conservePositions ", das anstelle der Kommentare die Kommentare nur mit Leerzeichen füllt. Dies ist nützlich, wenn Sie die ursprüngliche Position jedes SQL-Befehls beibehalten möchten, falls Sie das ursprüngliche Skript bearbeiten und dabei die ursprünglichen Kommentare beibehalten müssen.

%Vor%

Test 1 (erstes Original, dann Kommentare entfernen, zuletzt Kommentare / Literale entfernen)

%Vor%

Test 2 (erstes Original, dann Kommentare entfernen, zuletzt Kommentare / Literale entfernen)

%Vor%     
drizin 26.11.2015 22:13
quelle
1

Das funktioniert für mich:

%Vor%

Es passt alle Kommentare beginnend mit - oder eingeschlossen in * / .. * / Blöcke

    
Intrepid 04.12.2011 14:03
quelle
1

Ich sehe, dass Sie Microsoft SQL Server verwenden (im Gegensatz zu Oracle oder MySQL). Wenn Sie die Regex-Anforderung lockern, ist es jetzt (seit 2012) möglich, den eigenen Parser von Microsoft zu verwenden:

%Vor%

Siehe Entfernen von Kommentaren aus SQL

    
Michael J Swart 23.04.2014 18:44
quelle
1

Das Folgende funktioniert gut - pg-minify , und zwar nicht nur für PostgreSQL, sondern auch für MS-SQL .

Vermutlich, wenn wir Kommentare entfernen, bedeutet das, dass das Skript nicht mehr zum Lesen ist und es gleichzeitig eine Minimierung ist.

Diese Bibliothek löscht alle Kommentare als Teil der Skriptminimierung.

    
vitaly-t 18.03.2016 02:30
quelle

Tags und Links