正则表达式从sql语句中提取字段和数据类型

时间:2009-07-09 01:44:19

标签: sql vb.net regex

我有这个sql语句:

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

我想要的是正则表达式代码,我可以使用它来获取所有字段和数据类型。

所以会返回类似的内容:

FirstName varchar

MiddleName varchar

注意: sql语句将始终具有此格式。 我使用.Net来运行这个正则表达式

2 个答案:

答案 0 :(得分:1)

您没有提到SQL语句是在一行中的字符串中还是跨越多行。

假设它在一行上,这可能符合您的要求:

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

答案 1 :(得分:0)

我什么都不知道.NET。在其他一些世界中,以下内容可以处理操作的搜索部分:

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

将其插入.NET正则表达式的“搜索”格式(无论可能是什么),编写输出内容。如果可以在midword中出现换行符,则可能会出现问题。请注意,上面也会拉出类型的长度,因此会生成

MiddleName varchar 50

如果没有第三个反向引用,只需将其从替换(浪费)或执行

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

很多很好的方法。像往常一样,只要确保你理解输入的潜在可变性。