gpt4 book ai didi

c# - 在 SQL 查询中使用正则表达式获取所有未设置的参数

转载 作者:行者123 更新时间:2023-12-04 08:15:48 25 4
gpt4 key购买 nike

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

SET @Id = SCOPE_IDENTITY()
我试图在我的查询中获取所有未设置的变量,这是我的 Regex,它也获取 @Id,我的目标是不包括已在查询中设置的所有变量
这是我的正则表达式
Regex.Matches(sql, @"\@\w+").Cast<Match>().Select(m => m.Value).ToList();

最佳答案

您可以使用

\B@\w+\b(?!\s*=)
regex demo . 详情 :
  • \B@ - 匹配 @前面没有字符字符(以避免匹配子字符串,如 abc@def.com 等)
  • \w+ - 一个或多个字字符
  • \b - 词边界(需要在后续的负向前瞻匹配失败时防止回溯,以便如果整个 @word 可能失败并且不返回 @wor 匹配)
  • (?!\s*=) - negative lookahead如果在当前位置的右侧有零个或多个空格,然后是 =,则匹配失败。字符。

  • 请注意 @不是特殊的正则表达式元字符,您无需在正则表达式中对其进行转义。
    C# demo :
    var text = "INSERT INTO TestTable\r\n(\r\n    Test1,\r\n    Test2,\r\n    Test3,\r\n    Test4,\r\n    Test5\r\n)\r\nVALUES\r\n(\r\n    @Test1,\r\n    @Test2,\r\n\r\n    @Test3,\r\n    @Test4,\r\n\r\n    @Test5\r\n)\r\n\r\nSET @Id = SCOPE_IDENTITY()";
    var result = Regex.Matches(text, @"\B@\w+\b(?!\s*=)")
    .Cast<Match>()
    .Select(x => x.Value);
    foreach (var s in result)
    Console.WriteLine(s);
    输出:
    @Test1
    @Test2
    @Test3
    @Test4
    @Test5

    关于c# - 在 SQL 查询中使用正则表达式获取所有未设置的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65709975/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com