ParseRegExpr:替换功能
简述
替换功能,正则表达式匹配后按指定串进行替换。如果操作成功,返回1,并将替换后的结果保存在 Result变量中。
如果匹配不成功或者正则表达式编译错误,则返回字符串类型,为不成功的原因。
ParseRegExpr(RegExpr;ParseText;ParseCtrls:String; Rstr:String; Var Result:String):Boolean;
名称 | 类型 | 说明 |
---|
RegExpr | String | 字符串类型,正则表达式,基本兼容于Perl 5的正则表达式,查看正则表达式中的元字符 |
ParseText | String | 字符串类型。需要被匹配的源串。 |
ParseCtrls | String | 字符串类型。正则表达式控制串。,必须包括"r",字符控制定义请参考函数定义中的该参数。 |
Rstr | String | 替换内容的匹配串,支持两种方式
方式 |
功能 |
说明 |
举例 |
方式一 |
求值宏的方式 |
可以是普通自定义的字符串,也可以是根据匹配到的内容进行生成的串
$` $'获得匹配的左边和右边的字符串,,$&或者$0为匹配项,$1,$2,...$99等表示匹配的子项。
比如右边案例中,在没有替换时,$0表示的就是第0列的值如”2011a”,$1表示第1列的值,依此类推。
其中,第0列是被匹配的串,也是原串中需要被替换的串,在替换"2011a"时,$` 则表示原串source中在"2011a"的左边的串,即"ddd",$'表示右边的串即为" uuuu+"。 |
不替换时的匹配串:
source:="ddd2011a uuuu+2012b+zzzz 2013c xxx";
r:=ParseRegExpr("(\\d+)(\\w+)",source,"",s);
return s;
进行替换时:
source:="ddd2011a uuuu+2012b+zzzz 2013c xxx";
r:=ParseRegExpr("(\\d+)(\\w+)",source,"r","$2$1$`$0TD",result);
return result="ddda2011ddd2011aTD uuuu+b2012 uuuu+2012bTD+zzzz c2013+zzzz 2013cTD xxx";
// "$2$1$`$0TD" ?替代项为 第2项+第1项+左串+原项+"TD" |
方式二 |
回调函数 |
参数为一个数组,即被匹配到的字符串数组,可结合下面的范例理解。回调函数参数中第0项表示第0列,1表示第1列的值... |
source:="ddd2011a uuuu+2012b+zzzz 2013c xxx";
r:=ParseRegExpr("(\\d+)(\\w+)",source,"r",function(a) begin return 'Flag-'+a[2]+a[1];end,result);
return result;
//dddFlag-a2011 uuuu+Flag-b2012+zzzz Flag-c2013 xxx |
|
Result | String | 出参,存放匹配串被替换后的字符串。 |
返回 | Boolean | 1表示操作成功,否则返回匹配或替换失败原因 |
范例三:求值宏
//求值宏,将数字后的字母替换到数字前
source:="ddd2011a uuuu 2012b zzzz 2013c xxx";
ParseRegExpr("(\\d+)(\\w+)",source,"r","$2$1",s );
return s;
//结果:
ddda2011 uuuu b2012 zzzz c2013 xxx
范例四:回调函数
//回调函数,替换匹配串第1位+匹配串+匹配串第二位
Source:="ParseRegExpr 2011 ShenZhenTinysoft (TSL)";
ParseRegExpr("(\\d+).*(Tinysoft)",source,"r",function(a) begin return a[1]+a[0]+a[2];end,s);
return s;
正则表达式