1

我正在为我们的专有数据库实现我自己的 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?

4

3 回答 3

3

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

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

更新:它不会帮助你'@quoted @string @literals',这是合法的 SQL,但不是参数

于 2013-01-17T22:47:51.673 回答
2

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

(?<!@)@\w+
于 2013-01-17T22:47:46.977 回答
2

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

(?<!@)@\w{1,}
于 2013-01-17T22:48:21.687 回答