2009-07-09 2 views
0

ich diese SQL-Anweisung haben:Regex extrahieren Felder und Datentypen von SQL-Anweisung

CREATE TABLE [dbo].[User]([UserId] [int] IDENTITY(1,1) NOT NULL, 

[FirstName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [MiddleName] 

[varchar](50) COLLATE SQL_Latin1_General_CP1_CI_A 

Was ich will, ist die regex Code i alle Felder und Datentyp erhalten verwenden können.

So wird so etwas zurückgeben:

Vorname varchar

Middle varchar

Hinweise: Die SQL-Anweisung wird immer dieses Format haben. Ich verwende .Net, um diese Regex auszuführen

Antwort

1

Sie haben nicht erwähnt, ob die SQL-Anweisung in einer Zeichenfolge in einer Zeile oder wenn es mehrere Zeilen umfasst.

Unter der Annahme, es auf einer Linie ist, kann dies Ihre Anfrage passen:

Dim input As String = "CREATE TABLE [dbo].[User]([UserId] [int] IDENTITY(1,1) NOT NULL, " & _ 
        "[FirstName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [MiddleName] " & _ 
        "[varchar](50) COLLATE SQL_Latin1_General_CP1_CI_A" 

For Each m As Match In Regex.Matches(input, "\[(?<Field>\w+)\]\s*\[(?<Type>\w+)\]") 
    Console.WriteLine("{0} : {1}", m.Groups("Field").Value, m.Groups("Type").Value) 
Next 
0

Ich weiß nicht, etwas .NET. In einigen anderen Welten könnten folgenden Such Teil der Operation behandeln:

\[(.*?)\][\s\n\r]+\[(.*?)\]\((\d\d)\) 

dass Legen Sie in das „Suche“ Format für eine .NET Regex (was auch immer das sein mag), die Ausgabe Sachen schreiben. Wenn Zeilenumbrüche Midword auftreten können, könnte dies Probleme haben. Beachten Sie, dass die oben auch die Länge der Art zieht, so wäre es produzieren

MiddleName varchar 50 

ohne die dritte Rückreferenzierung zu tun, lassen Sie es einfach aus der replace (verschwendet) oder tun

\[(.*?)\][\s\n\r]+\[(.*?)\]\(\d\d\) 

Viel Fein Wege, es zu tun. Wie üblich, stellen Sie sicher, dass Sie die mögliche Variabilität der Eingabe verstehen.

Verwandte Themen