Поиск шаблонов в строках C#, аналог SQL LIKE оператора
#РазноеБыстрый ответ
Для работы со сложными шаблонами в C# используйте Regex.IsMatch, а для более простых задач поиска применяются встроенные методы работы со строками:
// Regex – на вашем боку в задачах поиска узоров!
bool isMatch = Regex.IsMatch(inputString, "^.*text.*$"); // Эквивалент в SQL: '%text%'
Методы Contains, StartsWith и EndsWith подходят для базовых проверок:
// Contains() – надежный помощник. Он может не быть сыщиком, но свою работу выполняет безукоризненно!
bool contains = inputString.Contains("text"); // Эквивалент в SQL: '%text%'
Для задач, требующих индивидуального подхода, можно создать метод Like() на основе регулярных выражений или расширений строк. Об этом мы поговорим подробнее.

Расширенное использование поиска по шаблонам
Перейдем к более детальному изучению материала.
Регулярные выражения – сильный инструмент поиска: создание метода Like()
Регулярные выражения более гибки в использовании, чем оператор LIKE в SQL. Они – что-то вроде универсального инструмента для поиска по шаблонам. Возьмем для примера метод Like():
// Такой метод Like обязательно стоит добавить в инструментарий каждого разработчика
public static bool Like(this string s, string pattern)
{
pattern = "^" + Regex.Escape(pattern).Replace("%", ".*").Replace("_", ".") + "$";
return Regex.IsMatch(s, pattern);
}
Стремление к точности: использование односимвольного шаблона
В SQL символ _ используется для обозначения любого одного символа. В регулярных выражениях такой же функцией обладает символ .. Воспользуйтесь этим при реализации своей версии метода Like() для использования шаблонов!
Мастерство фильтрации коллекций с помощью LINQ
С помощью LINQ можно фильтровать коллекции с той же лёгкостью, с которой вы смотрите кулинарные рецепты. Используя совокупно LINQ, строковые методы или вашу версию функции Like(), основанную на регулярных выражениях, вы сможете точно и эффективно отбирать данные:
// Фильтрация коллекций через LINQ похожа на отчётливую и чёткую работу профессионального кулинарного фильтра
var matches = myCollection.Where(x => x.Like("P%r_"));
Визуализация
Попробуем представить методы C# для работы с SQL LIKE в форме визуального процесса, напоминающего поиск необходимых ингредиентов для приготовления блюда:
Склад: ["Сахар", "Соль", "Паприка", "Перец"]
Ищем специи, начинающиеся на букву "П":
var spices = pantry.Where(i => i.StartsWith("P")); // Начинаем поиск...
Вот что у нас получилось:
Найденные специи: [🌶️ "Паприка", 🌶️ "Перец"]
В SQL оператор LIKE '%P%' ищет любое упоминание "P". В C# метод .Contains("P") работает схожим образом:
var spicesLikeP = pantry.Where(i => i.Contains("P")); // Используем возможности языка...
Соответственно, все строки, связанные с "P", найдены:
Результаты налицо: [🌶️ "Паприка", 🌶️ "Перец"]
Наблюдая за этим процессом, вы поймёте, что C# предлагает аналоги SQL LIKE для реализации эффективного и гибкого поиска.
Продвинутое использование с помощью методов расширения
Если стандартный функционал не в состоянии удовлетворить все ваши потребности и вам требуются дополнительные возможности, стоит рассмотреть вариант создания собственных методов расширения. Это позволит настраивать поиск по шаблонам так, чтобы он максимально отвечал специфике вашего проекта.
Тестируйте свои методы: Тестирование
Отлично, если вы разработали свои методы работы со строками. Тем не менее, их стоит протестировать на различных данных, чтобы убедиться в их корректной работе и надёжности. И, конечно же, обязательно уделите внимание тестированию крайних случаев!
Баланс производительности: Оптимизация
Не забывайте, что сложные регулярные выражения могут замедлить работу приложения. Старайтесь оптимизировать методы, например, кэшируя регулярные выражения или используя более простые строковые методы для обработки простых шаблонов.
Полезные материалы
Владимир Титов
редактор про сервисные сферы