2013-03-30 179 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,这有助于避免它,但不是很多。 –