在Delphi中使用通配符搜索字符串中的模式?

时间:2011-05-13 08:52:30

标签: delphi pattern-matching delphi-xe

我曾经使用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 个答案:

答案 0 :(得分:9)

正则表达式语法不同。 ?和*有不同的含义。有关正则表达式的精彩介绍,请参阅http://www.regular-expressions.info/tutorial.html。 您可以使用类似abcd [a-z] f或abcd \ wf的内容,甚至是其他语法,具体取决于您想要匹配的内容。

答案 1 :(得分:6)

如果?代表一个字符:

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

如果?代表任何刺痛:

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

没有XE所以没有测试过。

答案 2 :(得分:0)

您可以使用TMask进行wildchar匹配:

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

isMatch = true (C ++ Builder代码只能在Pascal中转换)