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,我试图在我的查询中获取所有未设置的变量这是我的正则表达式,它还获取@Id,我的目标是不包括在查询中设置的所有变量 这是我的正则表达式 INSERT INTO TestTable ( Test1, Test2, Test3, Test4, Test5 ) VALUES ( @Test1, @Test2, @Test3, @Test4, @Test5 ) SET @Id = SCOPE_IDENTITY() Rege

我试图在我的查询中获取所有未设置的变量这是我的正则表达式,它还获取@Id,我的目标是不包括在查询中设置的所有变量

这是我的正则表达式

INSERT INTO TestTable
(
    Test1,
    Test2,
    Test3,
    Test4,
    Test5
)
VALUES
(
    @Test1,
    @Test2,
    @Test3,
    @Test4,
    @Test5
)

SET @Id = SCOPE_IDENTITY()
Regex.Matches(sql,@“\@\w+”).Cast().Select(m=>m.Value.ToList();
您可以使用

\B@\w+\B(?!\s*=)
详细信息

  • \B@
    -匹配
    @
    前面不带字符(以避免匹配
    abc@def.com
    等)
  • \w+
    -一个或多个单词字符
  • \b
    -单词边界(当后续的反向前瞻未通过匹配时,需要防止回溯,以便整个
    @word
    可能会失败,并且不会返回
    @wor
    匹配)
  • (?!\s*=)
    -如果在当前位置的右侧有零个或多个空格,然后是一个
    =
    字符,则匹配失败
请注意,
@
不是一个特殊的正则表达式元字符,您不需要在正则表达式中转义它

见:

var text=“插入测试表\r\n(\r\n Test1\r\n Test2\r\n Test3\r\n Test4\r\n Test5\r\n)\r\n值\r\n(\r\n@Test1\r\n@Test2\r\n\r\n@Test3\r\n@Test4\r\n\r\n\r\n@Test5\r\n)\r\n\r\n\n\r\nSET@Id=SCOPE\u IDENTITY()”;
var result=Regex.Matches(文本@“\B@\w+\B(?!\s*=”)
.Cast()
.选择(x=>x.Value);
foreach(结果中的var s)
控制台。写入线(s);
输出:

Regex.Matches(sql, @"\@\w+").Cast<Match>().Select(m => m.Value).ToList();

欺骗不,我想应该是
@“\B@\w+\B(?!\s*=)”
您可以通过显式地查找
SET
来扩展匹配,但这不包括设置变量的其他方法,最明显的是
选择
,这是很难匹配的--同时,您不想匹配
其中@I=I
,这并没有设置任何东西。如果你想可靠地做到这一点,使用a是你最好的选择;否则,您可以满足于实际查询所显示的任何内容,并警告它不会100%可靠(目前大多数答案都是如此)。这很有帮助!谢谢我真的不擅长正则表达式谢谢你的回答我删除了我的答案,因为这更全面,但你可能想添加一个链接来解释负面外观head:@BennorMcCarthy谢谢,我也添加了更多细节来解释我表达式中子模式的选择。
@Test1
@Test2
@Test3
@Test4
@Test5