2011-05-13 45 views
6

我曾經使用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時,也得到了同樣的結果。

謝謝。

+2

想想你用匹配單個字符。 – MGH 2011-05-13 09:14:19

+0

真的嗎? MatchesMask *應該*已經工作。你確定你的測試是有效的嗎? – 2011-05-13 14:10:53

+0

@Rob,我的意思是MatchesMask在我的真實案例中不起作用。通過使用點,我的問題已解決。對不起,遲交回復,因爲我不得不修復一些代碼,所以我可以嘗試從MGH的答案。 – user 2011-05-17 11:59:51

回答

4

if?代表單個字符:

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

if?代表任何刺:

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

沒有XE所以沒有測試過。

+1

小心點...;)http://www.regular-expressions.info/dot.html,例如它會匹配abcdef,但它也會匹配abcd,f abcd/f,abcd(f等)。正則表達式可以使用更強大的語法來獲得您需要匹配的內容。 – 2011-05-13 09:32:36

+0

@MGH,它適用於我的示例,但不適用於我的真實代碼。等待.. – user 2011-05-13 09:37:36

+0

@user'。'不匹配如果你有換行符我想,那麼你需要使用'[。\ n \ r]'來代替'。' – MGH 2011-05-13 09:46:56

9

正則表達式的語法不同。 ?和*有不同的含義。請參閱http://www.regular-expressions.info/tutorial.html以瞭解正則表達式。 您可能會使用類似abcd [a-z] f或abcd \ wf的內容,甚至是其他語法,具體取決於您想要匹配的內容。

+1

對於您單獨提供的鏈接+1。我還建議,如果您打算花費任何時間處理正則表達式,您可以投資一份[RegExBuddy](http://regexbuddy.com)。這是創建和測試正則表達式的寶貴工具。 (不以任何方式附屬 - 多年來只是一個非常高興的客戶。) – 2011-05-13 11:29:14

0

可以使用TMask爲wildchar匹配: ''

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

isMatch =真 (C++ Builder代碼是帕斯卡只是translable)