2013-03-30 209 views
1

美好的一天。我似乎無法找到如何使用TRegExpr組件來做一個簡單的無效字符替換的例子。例如,我有一個字符串='abcdeg3fghijk';並且我想要替換所有無效的字符,如數字'3',那麼如何用TRegExpr處理這個字符來替換所有無效字符。我的意圖是學習如何使用TRegExpr來構建一個簡單的URL清理器/驗證器。刪除無效的url字符TRegExpr

procedure TForm1.Button3Click(Sender: TObject); 
var 
    RegExp: TRegExpr; 
    astr:string; 
begin 
    astr:='h"ttp://ww"w.msn."com~~~'; 
    // I want to clean the string to remove all non valid chars 

    //this is where I am lost 

    RegExp:=TRegExpr.Create; 
    try 
    RegExp.Expression:=RegExpression; 
    finally 
    RegExp.Free; 
    end; 
end; 
+1

您可能會發現這種有益http://stackoverflow.com/questions/833469/regular-expression-for-url和http:// regexlib.com/Search.aspx?k=URL&AspxAutoDetectCookieSupport=1 或http://mathiasbynens.be/demo/url-regex – bummi

+0

是什麼讓你覺得'3'是無效的URL字符? – OnTheFly

+0

'3'是爲了說明不需要的角色的想法。以上只是一個例子。我不知道如何使用TRegExpr來替換。 – megatr0n

回答

1

從評論和問題編輯判斷,你正在試圖找出如何使用正則表達式來執行替換。你需要的功能是TRegEx.Replace

有很多重載。最簡單的使用是類功能。例如:

NewValue := TRegEx.Replace(OldValue, '3', '4'); 

將與4

取代的3所有出現或者,如果你想使用的實例方法的方法,像這樣做:

var 
    RegEx: TRegEx; 
.... 
RegEx.Create('3'); 
NewValue := RegEx.Replace(OldValue, '4'); 

記住TRegEx是一個記錄,一個值類型。沒有Free打電話,也不需要try/finally。我個人認爲Create的名字很不好。如果我設計了TRegEx類型的話,我更希望Initialize

使用實例方法方法可以編譯表達式,並且可以加快性能,以便將同一個表達式重複匹配到不同的輸入數據。我不知道這對你是否重要。如果沒有,那麼使用更簡單的類函數接口。

你很明顯會擴展這個使用一個有用的正則表達式替換!

爲Delphi使用正則表達式PCRE風味的文檔是在這裏:http://www.regular-expressions.info/pcre.html

+0

我試過了,並得到了一個DCC錯誤不兼容的類型「布爾」和「字符」。 – megatr0n

+0

不適用於該代碼。三個參數接收'string',返回值是一個字符串。那裏沒有試圖匹配char和boolean。 –

+0

無法就命名達成更多共識。創建值類型很糟糕。在生命週期管理中創造(ha!)各種混亂。我們使用R而不是T來命名記錄類型的約定,即RSomeRecord而不是TSomeRecord,這有助於避免它,但不是很多。 –