Поиск шаблона в строке с использованием подстановочного знака в Delphi? - PullRequest
6 голосов
/ 13 мая 2011

Я использовал библиотеку HYPERSTR для обработки строк.Теперь я использую более новую Delphi.Мне нужно искать шаблон в строке, например, старая функция function IsMatchEx(const Source, Search:AnsiString; var Start:integer) : Integer;.На самом деле мне не нужно значение результата, я просто хочу знать, совпадает ли шаблон со строкой или нет.

Мой старый код (возвращает TRUE):

var
  StartPos: integer;
  FoundPos: integer;
begin
  StartPos := 1;
  FoundPos := IsMatchEx('abcdef', 'abcd?f', StartPos);
  if FoundPos > 0 then
    showmessage('match');
end;

Я вижу, чтоDelphi XE имеет TRegEx, но я все еще не понимаю, как его использовать.

Этот код не возвращает TRUE:

  if TRegEx.IsMatch('abcdef', 'abcd?f') then
    showmessage('match');

Я также получил тот же результат при использовании MatchesMask.

Спасибо.

Ответы [ 3 ]

9 голосов
/ 13 мая 2011

Синтаксис регулярного выражения отличается. ? и * имеют разные значения. См. http://www.regular -expressions.info / tutorial.html для превосходного введения в регулярные выражения. Вы можете использовать что-то похожее на abcd [a-z] f или abcd \ wf, или даже другой синтаксис, в зависимости от того, что вы хотите сопоставить.

6 голосов
/ 13 мая 2011

если? представляет один символ:

  if TRegEx.IsMatch('abcdef', 'abcd.f') then
    showmessage('match');

если? представлять любое укус:

  if TRegEx.IsMatch('abcdef', 'abcd.*f') then
    showmessage('match');

У меня нет XE, поэтому не проверял.

0 голосов
/ 10 января 2018

Вы можете использовать TMask для сопоставления с подстановочными символами:

TMask *m = new TMask("String to check");
bool isMatch = m->Matches("string to*");
delete m;

isMatch = true (код C ++ Builder просто переводится в Pascal)

...