【发布时间】:2011-10-20 10:10:03
【问题描述】:
我正在尝试编写一个支持“%”的 C# 搜索函数,该函数在类似 SQL 的运算符中进行搜索。 例如,
"%m%" 将匹配所有字符串,如下所示。
- 一些
- 我
- 总和
- 等等..
"%m%e" 将匹配类似 "some" 的字符串。
【问题讨论】:
标签: c# .net regex .net-2.0 c#-2.0
我正在尝试编写一个支持“%”的 C# 搜索函数,该函数在类似 SQL 的运算符中进行搜索。 例如,
"%m%" 将匹配所有字符串,如下所示。
"%m%e" 将匹配类似 "some" 的字符串。
【问题讨论】:
标签: c# .net regex .net-2.0 c#-2.0
static bool Like(string expression, string value)
{
return Regex.IsMatch(value, "^" +
Regex.Escape(expression).Replace("%", @"[\s\S]*?") + "$",
RegexOptions.IgnoreCase);
}
【讨论】:
Regex.Escape 来防止无效的正则表达式模式。
Hello 将匹配 Hello World :-)
!。 :) 你需要一个“真正的”解析器。
var result = Like("Hello", "Hello World"); // Should be false, it's true
public bool SqlWildcardMatch(string input, string sqlLikePattern)
{
sqlLikePattern = Regex.Replace(sqlLikePattern, "^([^%])", "^$1");
sqlLikePattern = Regex.Replace(sqlLikePattern, "([^%])$", "$1$$");
return Regex.IsMatch(input, string.Replace(sqlLikePattern, "%", ".*"));
}
此函数可能需要改进以确保 sqlLikePattern 不会产生无效的正则表达式模式,但应将其视为一个起点。
【讨论】:
sqlLikePattern;你必须先对它们进行消毒
_翻译成.。并且需要支持LIKE的转义符!。
如果您还想拥有 SQL 的 LIKE 处理下划线的方式,您可以使用我对 C# Version Of SQL LIKE 的回答,如果没有,您可以删除位 Replace('_', '.')。
【讨论】:
【讨论】:
如何使用regex.*m.*
【讨论】: