Строка поиска против "%" - PullRequest
       42

Строка поиска против "%"

3 голосов
/ 20 октября 2011

Я пытаюсь написать функцию поиска c #, которая поддерживает "%" в SQL-подобном операторе поиска. Например,

"% m%" будет соответствовать всем строкам, как показано ниже.

  • некоторые
  • мне
  • сумма
  • и т.д ..

"% m% e" будет соответствовать строкам, например "some".

Ответы [ 5 ]

5 голосов
/ 20 октября 2011
static bool Like(string expression, string value)
{
    return Regex.IsMatch(value, "^" + 
        Regex.Escape(expression).Replace("%", @"[\s\S]*?") + "$", 
        RegexOptions.IgnoreCase);
}
3 голосов
/ 20 октября 2011
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 не создавал недопустимый шаблон регулярного выражения, но рассматривал его как отправную точку.

1 голос
/ 20 октября 2011

Если вы также хотите, чтобы SQL LIKE обрабатывал подчеркивания, вы можете использовать мой ответ для C # версии SQL LIKE , а если нет, вы можете удалить бит Replace('_', '.').

0 голосов
/ 20 октября 2011

как насчет использования регулярное выражение .*m.*

0 голосов
/ 20 октября 2011

Вы можете понять это, используя регулярные выражения.

Пожалуйста, посмотрите на:

http://www.codeproject.com/KB/recipes/wildcardtoregex.aspx

...