我有这个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来运行这个正则表达式
答案 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\)
很多很好的方法。像往常一样,只要确保你理解输入的潜在可变性。