C# 在SQL查询中使用正则表达式获取所有未设置的参数
我试图在我的查询中获取所有未设置的变量这是我的正则表达式,它还获取@Id,我的目标是不包括在查询中设置的所有变量 这是我的正则表达式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
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