如何逐字处理从 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 读取的字符串?的主要内容,如果未能解决你的问题,请参考以下文章