【问题标题】:Extract SQL Parameter names from a string从字符串中提取 SQL 参数名称
【发布时间】:2013-01-17 22:37:52
【问题描述】:

我正在为我们的专有数据库实现类似 DBCommand 的包装器,通过它我们只能通过 API 和使用字符串进行访问。呜呜呜

我希望能够通过正则表达式找到我的常规参数,而不是选择 @@IDENTITY 字段(或其他类似的字段)。然后,我将用该参数的实际值 NULL'Some Value' 等替换参数名称。

目前我有

@\w{1,}

给定一个字符串

INSERT INTO MYTABLE(VALUE1, VALUE2) VALUES (@MyValue1, @MyValue2); SELECT @@IDENTITY

我正在匹配

@MyValue1
@MyValue2
@IDENTITY

我也试过[^@]@\w{1,},但它匹配(@MyValue1_@MyValue2(下划线代表空格)

我怎么不能匹配@@Identity?

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您可以添加括号,标记您实际要使用其匹配字符串的子表达式:[^@](@\w{1,}),然后使用Match.Groups(1) 仅检索该部分。

    另一种变体是否定的后向断言:(?<!@)@\w{1,},在字符串的开头匹配 @name 的额外好处(好吧,它可能不会发生)。

    更新:'@quoted @string @literals' 对您没有帮助,它们是合法的 SQL,但不是参数

    【讨论】:

      【解决方案2】:

      试试这个,我假设这是你想要的。

      (?<!@)@\w+
      

      【讨论】:

        【解决方案3】:

        您可以使用 lookbehind 来确保它不以 2 @ 开头:

        (?<!@)@\w{1,}
        

        【讨论】:

          猜你喜欢
          • 2019-08-23
          • 2021-11-19
          • 2013-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-12
          • 2019-08-22
          相关资源
          最近更新 更多