我正在使用EF,并且我实现了支持通配符搜索的搜索功能。
例如,如果给定的搜索输入为%CU%P%
,我会将其格式化为^.*?CU.*P.*?$
并使用regex.isMatch
选择它。像SQL LIKE '%CU%P%'
这样的东西。示例:
string regexSearch = GeneralHelper.RegexWildCardSearchPattern(requestDto.Name); ( it will format the % become ^.*?CU.*P.*?$)
Regex regex = new Regex(regexSearch, RegexOptions.IgnoreCase);
allCompetitionList = allCompetitionList.Where(x => regex.IsMatch(x.CompetitionName)).ToList();
但是当用户给我类似%????%
的内容时,我会点击Nested Quantifier问题。
如果用户给我类似%???%
的内容,我将只返回我的数据库中的????
。
我试过,如果我手动输入一个输入成为%\\\?\\\?\\\?%
,它会返回????
条记录。
我想我需要通过将\\添加到除了%之外我想要转义的任何字符来逃避字符。我怎样才能做到这一点?
答案 0 :(得分:0)
正则表达式中具有特殊含义的字符可以通过在它们前面加上反斜杠来转义。 .Net正则表达式类包括Regex.Escape(...)
method来转义字符串中的字符。
在调用Regex.Escape(...)
方法之前,应该在输入字符串上使用GeneralHelper...
。如果GeneralHelper...
方法仅执行问题中显示的内容(即添加^
和$
,请将%
替换为.
或.*
)那么下面的代码就足够了。
string regexSearch = GeneralHelper.RegexWildCardSearchPattern(
Regex.Escape(requestDto.Name));