我正在为我们的专有数据库实现自己的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?
答案 0 :(得分:3)
您可以添加paretheses,标记您实际想要使用其匹配字符串的子表达式:[^@](@\w{1,})
,然后使用Match.Groups(1)
仅检索该部分。
另一个变体是负面的后置断言:(?<!@)@\w{1,}
,在字符串的最开头有一个额外的奖励匹配@name
(好吧,它可能不会发生)。
更新:它对'@quoted @string @literals'
合法SQL ,但参数
答案 1 :(得分:2)
试试这个,我假设你想要的。
(?<!@)@\w+
答案 2 :(得分:2)
您可以使用lookbehind确保其不以2 @
开头:
(?<!@)@\w{1,}