【问题标题】:Regex parse sql string正则表达式解析 sql 字符串
【发布时间】:2016-04-29 00:56:35
【问题描述】:

我有像

这样的 sql 字符串
select * from dbo.Person where Person  = ? AND Name = ? OR (Country = ? OR City = 1)

如果可以在 C# 中使用 Regex 获得如下字符串数组

result[0] = Person = ?
result[1] = Name = ?
result[2] = (Country = ? OR City = 1)

谢谢。

【问题讨论】:

  • 真的要自己解析sql吗?如果有,为什么?
  • from dbo.Person where Person 的意思是人是表名还是列名?
  • 这对于现实世界的应用程序是必要的吗?如果是这样,以我的拙见,它不应该..
  • 是的,因此您可以制作正则表达式并为此使用 Regex.Matches(string, regex) 。
  • .NET 内置了这个功能。看看herehere

标签: c# sql regex parsing


【解决方案1】:

第一次尝试是这样的

var s = @"select* from dbo.Person where Person = ? AND Name = ? OR (Country = ? OR City = 1)";

 var reg = new Regex("[A-Za-z]+ = [A-Za-z0-9?]+");

var result =  reg.Matches(s);

类似的东西,但不是正则表达式

  var s = @"select* from dbo.Person where Person = ? AND Name = ? OR(Country = ? OR City = 1)";

  var s1 = s.Split(new[] { "where" }, StringSplitOptions.None)[1];

  var s2 = s1.Split(new[] { "OR", "AND" }, StringSplitOptions.None);

【讨论】:

  • 您的正则表达式与 result[2] = (Country = ? OR City = 1) 不匹配。 It 匹配 Country = ?City = 1 作为两个不同的匹配项。
【解决方案2】:

如果您需要比这更复杂的东西,它会很快超出您可以使用正则表达式轻松解决的问题。我在 GitHub 上发布了一个免费的解析器,它将以稳定的方式将 TSQL 解析成各个部分,TSQL Parser。您还可以使用 Microsoft TSQL 解析器 using the TSqlParser 。使用其中任何一个,它们都会比您要求的更细化,然后您必须根据括号将其重新组合在一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多