分享

正则表达式基础符号(2) | VBA实例教程

 gblhp 2015-02-16

除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/467.html,VBA交流群273624828。

继续来看下正则表达式的基础符号。

{n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
{n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

上面这几个符号都是用来规定匹配次数的,我们通过这个字条串“学A挖AA掘AAA机AAAA哪AAAAA家强?”来说明问题。

Sub Macro()
Dim str, regx
str = "学A挖AA掘AAA机AAAA哪AAAAA家强?"
Set regx = CreateObject("VBScript.RegExp")
With regx
.Global = True
.Pattern = "A{2}"      '学A挖B掘BA机BB哪BBA家强?
'.Pattern = "A{2,}"     '学A挖B掘B机B哪B家强?
'.Pattern = "A{2,4}"    '学A挖B掘B机B哪BA家强?
str = .Replace(str, "B")
Debug.Print str
End With
End Sub

我们原字符串中有1到5个A不等,“A{2}”代表匹配两个A,那第一个A肯定不能匹配,挖和掘之间的2个A可以匹配,掘和机之间有3个,这时就会匹配前2个A,第3个A不能匹配,机和哪之间4个A,则前2个A一组匹配,后2个A一组匹配,哪和家之间5个A,亦是2个一组的匹配,剩下最后单个A不能匹配,把所有匹配上的都替换成B,所以最后留下的结果就是“'学A挖B掘BA机BB哪BBA家强?”。

"A{2,}"代表至少匹配两个A,那第1个A不能匹配,后面2个、3个、4个和5个A都可以匹配上,所以最后结果是“学A挖B掘B机B哪B家强?”

"A{2,4}"代表至少匹配2个A,最多匹配4个A,所以可以匹配挖和掘之间2个A,掘和机之间3个A,哪和家之间只能匹配前4个,最后结果是“ 学A挖B掘B机B哪BA家强?”。

看了上面的演示也就知道了正则表达式不会对同一个字符重复匹配,比如一个字符串是AAAAA,如果你要匹配其中两个A,即A{2},那不会说匹配前2个A,然后第2个和第3个A又匹配,第3个A和第4个A再匹配的情况,前2个A匹配之后就不再匹配,第3个A和第4个A匹配之后也不再参与下面的匹配,把匹配结果换成B就是“BBA”。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多