weiqi7777

svlib(4)- 正则表达式

0
阅读(2986)

svlib,提供了正则表达式支持,可曾想过,在sv中,竟然还能用正则表达式,只要用上了svlib这个开源库,就可以在sv中,使用正则表达式了。

一、            Regex

svlib中,提供了Regex类,来实现正则表达式。该类的new方法,是protected修饰的,所以该类不能通过通过new方法,创建对象。

clip_image002

text:正则表达式

runStr Str类对象,对象中,保存有待匹配的字符串

         其实,正则表达式的实现,还是通过调用DPI的方式,调用c实现的正则表达式匹配。linux提供了一个库函数,regexec,实现正则匹配。

clip_image004

二、            方法

1.                创建

类中,提供了几个方法:

clip_image006

create,就是创建对象

setRE:设置正则表达式

setOpts:设置选项

setStr 设置待匹配的字符串,传参是Str类对象

setStrContents 设置待匹配的字符串,传参是string类型。

2.                匹配

两个方法

clip_image008

test:匹配传参的Str类中的待匹配字符串

retest:匹配Regex类中的runStr中的待匹配字符串

3.                替换

将待匹配的字符串中符合正则表达式的,替换成传入的substStr字符串。

clip_image010

4.                获取结果

clip_image012

getMatchCount: 符合匹配的个数

getMatchStart:  符合匹配的起始位置, 传参表示第几次匹配

getMatchLength: 符合匹配的内容的长度, 传参表示第几次匹配

getMatchString:  符合匹配的字符串, 传参表示第几次匹配

三、            例子

从字符串中,将数字匹配出来。匹配出来的数字有两组。

clip_image013

         执行结果:

clip_image015

         匹配数为3,表示匹配到了3项。

第一项是匹配到的整个字符串

第二项是正则表达式中的第一个()中内容

第三项是正则表达式中的第二个()中内容

         也可以对字符串进行替换

         将字符串中的数字字符串,全部替换为987654

clip_image017

         执行结果:

clip_image019