【问题标题】:How can I treat strings read from SQL as verbatim?如何逐字处理从 SQL 读取的字符串?
【发布时间】:2016-08-28 17:10:44
【问题描述】:

我正在为我们的设施开发病毒/勒索软件预警系统,该系统将从 FileSystemMonitor 收集的文件名和路径与 SQL 数据库中的正则表达式列表进行比较。

我遇到的问题是 C# 在从 SQL 服务器读取我的正则表达式时对其进行转义。

例如:

SqlCommand command = new SqlCommand("SELECT * FROM Filters ORDER BY Sequence ASC", sqlServer);
SqlDataReader reader = null;
reader = command.ExecuteReader();
filter temp;

while (reader.Read())
{
    temp.dir = @reader["Folder"].ToString().Trim();
    temp.file = @reader["Filter"].ToString().Trim();

    if (!temp.file.Equals(""))
    {
        filterList.Add(temp);
    }
}

如果 SQL 字段 Filter 包含有效的正则表达式 .*\.scr$,则 temp.filter 以内容 .*\\.scr$ 结束,这会导致正则表达式匹配丢失。

从 SQL 读取时,如何保持正则表达式的逐字状态?

提前感谢您的帮助!

【问题讨论】:

  • 你在哪里看到额外的反斜杠?如果它在调试中,那是因为它在那里显示了转义序列。
  • 您如何验证您的字符串是否包含.*\\.scr$?设置断点并使用检查器查看变量的值将始终显示转义字符。
  • 您确定您不只是查看调试窗口吗?它显示了在那里转义的字符串,但实际上它们不包含那些转义字符。
  • 是的,我正在查看调试信息。我以为它会显示字符串的确切内容……听起来好像没有。
  • @user1666620 这确实有道理,谢谢!

标签: c# sql regex


【解决方案1】:

只是想验证这个问题是否已解决。在阅读器命令前面包含@ 会产生预期的效果,只是我是通过调试环境查看字符串,这让我感到困惑。

感谢大家的意见!本来打算为有帮助的 cmets 投票,但看起来我还没有足够的代表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    相关资源
    最近更新 更多