Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串中提取SQL参数名称_C#_Regex - Fatal编程技术网

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

C# 从字符串中提取SQL参数名称,c#,regex,C#,Regex,我正在为我们的专有数据库实现我自己的DBCommand-like包装器,通过它我们只能通过API和字符串进行访问。呜呜 我希望能够通过正则表达式找到我的正常参数,而不是选择@标识字段或其他类似的内容。然后,我将用该参数的实际值NULL或'Some value'等替换参数名 目前我有 @\w{1,} 给一串 INSERT INTO MYTABLE(VALUE1, VALUE2) VALUES (@MyValue1, @MyValue2); SELECT @@IDENTITY 我正在配对 @My

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

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

目前我有

@\w{1,}
给一串

INSERT INTO MYTABLE(VALUE1, VALUE2) VALUES (@MyValue1, @MyValue2); SELECT @@IDENTITY
我正在配对

@MyValue1
@MyValue2
@IDENTITY
我还尝试了[^@]@\w{1,},但它与表示空间的@MyValue1和@MyValue2下划线匹配


我怎么能不匹配@@Identity?

试试这个,我想这就是你想要的

(?<!@)@\w+

试试这个,我想这是你想要的

(?<!@)@\w+

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

另一个变体是否定的look-behind断言:?,另外还有一个额外的好处,就是在字符串的开头匹配@name,很可能不会发生这种情况


更新:对于'@quoted@string@literals',这是合法的SQL,但不是参数,

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

另一个变体是否定的look-behind断言:?,另外还有一个额外的好处,就是在字符串的开头匹配@name,很可能不会发生这种情况

更新:它对“@quoted@string@literals”没有帮助,后者是合法的SQL,但不是参数

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

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