Простое решение в Delphi для поиска по подстановочным знакам в строках со звездочкой

Я хотел бы реализовать простую форму поиска для пользователей по списку строк. Предположим, что пользователи знакомы с подстановочными знаками в целом, но не с регулярными выражениями.

Это, конечно, тривиально сделать с помощью TMask:

uses
  masks;

procedure search(mystring: string);
var
   M: TMask;

begin
   M:= Tmask.create(mystring);
   try
      // some action if matches
      // loop code skipped here

      if M.Matches(Myform.content) then 
        Myform.found := true;
   finally
      M.Free;
   end;

end;

Это работает так, как ожидалось.

Но как мне выполнить поиск строк, содержащих литеральные символы * и ?? Скажем, я хочу найти строку *** или ***** ? Шаблон поиска ***?? будет соответствовать чему угодно, как и одиночный *, поэтому он также найдет ABCDEF.

Лучше ли сделать самостоятельное решение на основе регулярных выражений в фоновом режиме или существует альтернативная простая библиотека подстановочных знаков?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня была бы такая радиогруппа:

(и, возможно, флажок «С учетом регистра» и/или «Поиск слов»)

а затем либо вызовите M.Matches, либо POS(MyString,MyForm.Content)>0.ToUpper или без него)

на основе выбора.

Вы должны позволить пользователю решить, являются ли эти символы буквальными или специальными — вы не можете сделать это самостоятельно.

Лично я бы поставил три флажка («С учетом регистра», «Поиск по словам» и «Использовать подстановочные знаки (* и ?)»).

Andreas Rejbrand 12.08.2024 11:20

@AndreasRejbrand: Это тоже вариант — радиогруппа мне нравится больше, потому что она более информативна. ЮММВ.

HeartWare 12.08.2024 11:21

Я не подумал о совершенно очевидном решении «pos()». Это будет первоначальный способ. Следующим улучшением может стать создание подклассов масок, чтобы можно было выбирать символы маски.

MyICQ 12.08.2024 12:05

Другие вопросы по теме