在Delphi中使用通配符搜索字符串中的模式?
我曾经使用HYPERSTR库进行字符串处理例程。现在我使用更新的Delphi。我需要在一个字符串中搜索一个模式,例如旧功能是function IsMatchEx(const Source, Search:AnsiString; var Start:integer) : Integer;
。其实我不需要结果值,我只是想知道模式是否与字符串匹配。在Delphi中使用通配符搜索字符串中的模式?
我的旧代码(返回TRUE):
var
StartPos: integer;
FoundPos: integer;
begin
StartPos := 1;
FoundPos := IsMatchEx('abcdef', 'abcd?f', StartPos);
if FoundPos > 0 then
showmessage('match');
end;
我看到德尔福XE拥有TRegEx但我还是老样子不明白使用它。
这些代码不会返回TRUE:
if TRegEx.IsMatch('abcdef', 'abcd?f') then
showmessage('match');
我使用MatchesMask
时,也得到了同样的结果。
谢谢。
if?代表单个字符:
if TRegEx.IsMatch('abcdef', 'abcd.f') then
showmessage('match');
if?代表任何刺:
if TRegEx.IsMatch('abcdef', 'abcd.*f') then
showmessage('match');
没有XE所以没有测试过。
正则表达式的语法不同。 ?和*有不同的含义。请参阅http://www.regular-expressions.info/tutorial.html以了解正则表达式。 您可能会使用类似abcd [a-z] f或abcd \ wf的内容,甚至是其他语法,具体取决于您想要匹配的内容。
对于您单独提供的链接+1。我还建议,如果您打算花费任何时间处理正则表达式,您可以投资一份[RegExBuddy](http://regexbuddy.com)。这是创建和测试正则表达式的宝贵工具。 (不以任何方式附属 - 多年来只是一个非常高兴的客户。) – 2011-05-13 11:29:14
可以使用TMask为wildchar匹配: ''
TMask *m = new TMask("String to check");
bool isMatch = m->Matches("string to*");
delete m;
isMatch =真 (C++ Builder代码是帕斯卡只是translable)
想想你用匹配单个字符。 – MGH 2011-05-13 09:14:19
真的吗? MatchesMask *应该*已经工作。你确定你的测试是有效的吗? – 2011-05-13 14:10:53
@Rob,我的意思是MatchesMask在我的真实案例中不起作用。通过使用点,我的问题已解决。对不起,迟交回复,因为我不得不修复一些代码,所以我可以尝试从MGH的答案。 – user 2011-05-17 11:59:51