开发工具与关键技术:RegexBuddy+正则表达式
作者: 李伙
撰写时间: 2019年6月25日
在上一篇中,我们讲到了在JavaScript和C#是如何使用正则表达式的,而在JavaScript和C#中每写好一个正则表达式我们就要运行VS来看看写的正则表达式是否是正确的,是否是符合我们想要的效果。可如果要写的正则表达式比较多,而且还不知道是否是正确的,如果一写好就运行VS会浪费我们的很多时间,所以是否会有办法来解决我们的问题,答案是肯定的。我们可以用专门的工具来测试我们写好的正则表达式,看看是否符合,如果符合了我们就可以复制到VS,这样做就能减短我们的很多时间。我们现在是使用RegexBuddy 4这个软件来测试的,测试正则表达式的工具有很多,这只是其中一个,也可以直接在线测试正则表达式。
接下来看看如何使用RegexBuddy 4来测试正则表达式的。
如上图所示:我们可以直接匹配纯文本,但这个正则表达式没什么意义,因为如果我们要匹配的字符串较多时不可能只用纯文本来代替,但是可以作为学习正则表达式的起点。
如上图所示:“\w”是匹配字母、数字或下划线,比如空格等就不会匹配的,“\w”等价于“[A-Za-z0-9_]”,这就包含了26个字母的大小写,0-9还有下划线,“[]”表示字符集合,匹配所包含的任意一个字符。
如上图所示:有什么不同之处呢?就是w大小写的不同,w大小写的不同表示的正则表达式也就不同,“\W”是匹配任意不是字母、数字和下划线的字符,即除了字母、数字和下划线的字符之外的任意字符,“\W”等价于“[A-Za-z0-9_]”。“[x]”表示匹配除了指定字符以外的任意字符,例如这里匹配除了x以外的任意字符。字母大小写的不同,表示的正则表达式的不同还有很多,比如:\d 匹配数字,等价于[09],而\D 匹配任意非数字的字符,等价于[∧09];\s 匹配任意的空白符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v],而\S 匹配任意不是空白符的字符。等价于 [∧\f\n\r\t\v],这就不一一列举了。
如上图所示:利用正则表达式匹配出p标签里面的所有span标签,这在VS中比较常见的,比如手动录入题目信息时,有时候是需要上传图片或者其他文件的,在保存时可以用正则表达式把匹配出的所有图片保存到指定的文件夹中。
这里用到了纯文本匹配,从span标签开始匹配,匹配到span标签的结束位置。这里运用到正则表达式的贪婪与懒惰的特性,正则表达式默认是贪婪型的,通常的行为是匹配尽可能多的字符,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的重复元字符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号“?”,加上问号后就可以尽可能少的匹配。
“.”点号表示匹配除换行符以外的任意字符,“+”表示重复一次或更多次,等价于“{1,}”,“(?=exp)”:零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。“(?<=exp)”:零宽后行断言,它匹配文本中的某些位置,这些位置的前面能给定的前缀匹配exp。