从字符串中提取SQL参数名称

时间:2013-01-17 22:37:53

标签: c# regex

我正在为我们的专有数据库实现自己的DBCommand包装器,我们只能通过API和使用字符串来访问它。 Boooo

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

目前我有

@\w{1,}

给定一个字符串

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

我正在匹配

@MyValue1
@MyValue2
@IDENTITY

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

我怎么能不匹配@@ Identity?

3 个答案:

答案 0 :(得分:3)

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

另一个变体是负面的后置断言:(?<!@)@\w{1,},在字符串的最开头有一个额外的奖励匹配@name(好吧,它可能不会发生)。

更新:它对'@quoted @string @literals' 合法SQL ,但参数

无效

答案 1 :(得分:2)

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

(?<!@)@\w+

答案 2 :(得分:2)

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

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