如何逐字处理从 SQL 读取的字符串?

Posted

技术标签:

【中文标题】如何逐字处理从 SQL 读取的字符串?【英文标题】:How can I treat strings read from SQL as verbatim? 【发布时间】: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 这确实有道理,谢谢! 【参考方案1】:

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

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

【讨论】:

以上是关于如何逐字处理从 SQL 读取的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 从文本文件中逐字读取单词或逐字符读取单词

逐字符而不是逐字读取文本文件?

如何从文件中逐字读取?

为什么stdin逐行读取而不是像字符串一样逐字读取?

如何使用 SQLAPI++ 从 SQL 服务器读取 unicode 字符?

如何删除从perl读取sql文件时附加的特殊字符