Hi,大家好,本章节开始将会从零开始和大家用图文的方式,让你从零基础学会正则表达式!有兴趣的小伙伴可以持续关注我,或者在专栏中进行查看自我学习,愿与君携手前行!
在上一个章节说到正则表达式的入门级知识点,本节将会与大家分享一下正则表达式的是具体实现方式是怎么样的?
在继续学习正则元字符特性或编制自己的正则表达式时,常常需要对其测试.也可以自己编制VBA代码进行测试,这样做的好处是可以提高在今后实际工作应用正则表达式的能力。所以,先介绍正则与VBA的交互的相关知识,让你在VBA中间使用正则表达式游刃有余。当然你也可以快速阅读或直接越过本章内容,在你以后的实际具体工作应用时,直接查阅即可。当然也可以用上一章学到的知识详细研究本章内容,在以后的学习中专注于正则表达式本身.
正则处理文本,其实是通过正则表达式与程序设计语言的互相交互来实现。交互方式在不同编程语言中主要是分为三大类:
一是集成式。Perl语言本身内建正则操作符,可以直接作用于正则表达式.操作符作用于正则表达式就像数学的+-号作用于数字一样.不需要构建正则对象。
二是函数式处理。Java等语言,为正则处理提供了一些便捷函数,以节省工作量.用户不需要首先创建一个正则对象,而是用静态函数提的临时对象来完成正则处理,处理完后把临时对象抛弃. 正则表达式对于函数相当于一个参数, 这种方式的优点是”随手”可用,但不适宜在对时间要求很高的循环中使用.所以java也提供了下面讲到的面向对象的程序式处理.
三是面向对象的程序式处理。这种方式是大多数编程语言的正则处理方式。VBA平台采用的也是这种方式。面向对象的程序式处理方式,首先必须创建一个正则对象的实例,然后设置对象必要的属性,最后用对象的方法来完成指定的任务。
在上一章知识点中,给出了一个用VBA删除行尾空格的正则处理例子,它代表了一般的代码框架模式,下面再看一看它的结构特点,并对每一部分的代码段进行仔细的剖析,让你充分了解正则表达式的应用。
1.定义变量代码段,就是定义常规数据类型和变量。
2.目标文本字符串赋值代码段,目标文本,可能存在于文本文档、Word文档、HTML文档或Excel文档等文档之中。正则对象并不能直接作用于这些文档,只能作用于它们的副本。所以用VBA正则处理这些文档,必须首先从这些文档中读出字符串并赋值于字符变量。如果任务是修改文本,那么,你可能需要编写额外的代码将修改后的文本字符串重新写回原文档中. 目标文本也可能分别存在于一个数组中,那么,你可能需要通过循环逐一处理.
3.创建正则对象代码段,本处理的各种操作,都是通过操作正则对象来完成的.所以必须创建正则对象.VBA创建或声明正则对象有两方式:早期绑定和后期绑定,你可以根据自己喜好选择其一:
早期绑定: (需要在VBE--工具--引用中勾选Microsoft VBScript Regular Expressions 5.5)
后期绑定:
Dim regx AS RegExp
Set regx=new regexp (或dim regx as new regexp)
Set regex = CreateObject("VBScript.RegExp")
利用上述两种方式创建或声明正则对象,实际上是调用Microsoft VBScript脚本的regexp正则对象。Microssoft VBScript脚本,包含在Internet Eeplorer 5.5以及之后的版本中.该脚本中的正则表达式执行的是ECMA-262第3版所规定的标准,与JavaScript脚本中的正则执行标准是相同的。1.0版只是为了向后兼容的目的,功能很弱。
4.设置对象的pattern属性
语法:object.pattern=”正则表达式”
Object是一个正则对象.
把自己编制的正则表达式,以字符串的形式赋值给pattern属性。注意要用英文双引号将正则表达式包围起来.
并且要在对象名与属性名之间用英文点号隔开.属性名pattern是保留字,固定不变的,对象名是用户自定义的。
5.设置对象的其它属性
除Pattern属性外,正则对象还有其它三个属性,其属性值有False和True,默认值都是False。如果要使用默认属性,可以不用显示设置;如果要改变默认属性,则需要显示设置:
Global 当属性值为False时,只要在目标文本中,找到一个匹配时,即停止搜索。如果想要找出目标文本中的所有匹配,那么需要把它的属性值设置为True。
IgnoreCase 设置对英文字母大小写是否敏感。默认值False, 对大小写敏感;设置为True,忽略大小写.
MultiLine 它影响且只影响元字符^和$的意义。值为False,无论目标文本是多少行,整个文本中则只有一个开始位置,^表示第一行的开始;只有一个行结束位置,$表示文本末尾位置。值为True,那么,^和$分别表示每一行的行首和行尾位置。
下面来完成一个简单的任务,再具体认识各属性的使用方法:
有一两行的文本:
Aaa
Bbb
任务要求:
1.在文本开始和结束处,分别插入一个”@”符号;
2.在文本每行的开始和行尾分别插入”@”符号。
使用的正则表达式:
^|$ 表示匹配行开始或结束位置
Test1中间显示的结果为@AaaBbb@,test02中间显示的结果为 @Aaa@@Baa@。
Test2代码与test1代码唯一区别是修改了mutiline默认属性,设置为True。这就意为着,该文本的每一行都存在一个开始位置和结束位置。代码1中修改了global的默认属性值,设置为true;目的是保证能找到并替换全部的开始或结束位置。如果保持默认属性,则只会在开始处插入一个@号。
正则对象Reg的其它两个属性保持为默认。因为本任务无关乎字母大小问题,所以IgnoreCase属性无需要设置为Ture(当然如果设置为true,对最后结果也无影响);由于Mutiline属性保持默认,其值为False,所以整个文本只有一个开始位置和一个结束位置。
6.应用对象的方法代码段
VBScirpt正则对象的方法共有三个:你可以根据任务要求选择使用一个或多个方法.
(1)TEST方法
语法:Object.Test(string)
Test方法只是简单测试目标文本中,是否包含正则表达式所描述的字符串。如果存在,则返回True,否则返回False。
test方法的语法,在方法与正则对象之间也是用英文点号隔开,作为参数,目标字符串用英文括号包围。
(2)Replace方法
替换在目标文本中用正则表达式查找到的字符串。
前面例子中语句体现其语法:s=reg.replace(s,”@”)
后面括号中的参数S,代表前面代码中设置的目标文本字符串.也就是正则表达式将要作用的目标文本.”@”是用来替换的字符串参数.前面的s是Replace方法返回的结果,它是目标文本被替换后的一个副本. 如果没有找到匹配的文本,将返回与目标文本一样的一个副本.
(3)Execute方法
在目标文本中执行正则表达式搜索。
语法:set mh=object.execute(s)
其中mh是用户自定的对象变量,S是值为目标文本的字符串变量.object是正则对象.Execute方法会作用于目标文本(S),并返回一个叫作"Matches"的集合对象,在这里是mh.在这个集合对象中包含它找到的所有叫做"Match"的成功匹配对象(Matches集合最多可容纳65536个匹配对象). 如果未找到匹配,Execute 将返回空的 Matches 集合。Matches集合有两个只读属性:索引(Item)和成功匹配的次数(Count).Matches集合中包含的匹配对象Match有四个只读属性:Value/firstindex/length/submatches。值得一提的是,Submatches属性是一个集合属性,集合中元素个数与正则表达式中使用的捕获性括号的个数相同,每个元素的值就是括号包围起来的内容.它也有两个只读属性:item和Count
现在已经基本和大家阐述了正则表达式的基本思想,并和大家对正则在VBA中的实现作了详细讲解.接下来的时间我们将集中介绍VBA中可使用的全部元字符(序列),有的称为元字符的"特性",有的叫作正则"语法".反正它的基本属性就是用来描述字符的特殊字符.)
好啦!快乐的时间总是非常短暂的,又到了和大家说再见的时候,如果大家感觉本文如果对你有所帮助的话,请帮忙转发点赞,谢谢您能观看到现在,我们下期再见!
我是Excel教案,关注我持续分享更多的Excel技巧!
如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。