1. 关于“匹配”一词的理解。
这是正则表达式用的最多的词,但是这个词对于初学者常常给人忽远忽近的感觉,有时候感觉理解了,有时候又觉得被绕进去了,离真正理解还很远。
我们在windows电脑上搜索文件,比如要搜所有MP4格式的视频,可以在搜索栏中输入“*.MP4”,搜索出来的文件就是mp4视频文件,假设搜索结果如下:
精通java.mp4 战狼2.MP4 三国央视版.MP4
用正则词汇来说,“*.MP4”匹配“精通java.mp4”、“战狼2.MP4”、“三国央视版.MP4”等字符串。
用我们通俗的话来说,“*”字符能代表“精通java”、“战狼2”、“三国央视版”等字符串,匹配就是这个正则表达式能代表这个字符串。
匹配结果,就是按照正则表达式的规则,在字符串中能不能找到符合此规则的字符串,能找到多少个字符串。如果不能找到称为不匹配,如果能找到一个或者多个,则每一个都称为一个匹配。
匹配这个词之所以常常令人费解,那是因为很多书把这个词义经常混淆一起用,把初学者搞晕了。
匹配有三种形式的存在:
——形容词性质的匹配:一个字符串“契合”一个正则,用于判断输出true或false。
——动词性质的匹配:在字符串中搜索符合正则的字符串。
——名词性质的匹配:字符串中满足正则的一部分,每一个部分都称为一个匹配。
这几个混在一起,很容易把人搞懵了。其实你只需要记住,匹配就是根据正则表达式这个“规则”,能在字符串中找到子字符串,就是匹配,就是这么简单。
2. 关于字符串的理解
正则表达式是判断、搜索字符串的专门语言,处理的一切对象都是字符串(文本也是字符串的一种,只不过包含换行等特殊符号而已),没有其他数据类型之分。
比如,对“18790”,我们在其它语言如C、Java、PHP中会认为这是一个数字,是一个整体,但是在正则中,它只是由5个数字组成的字符串,对,只是字符串而已,和“abcde”性质是一样的,并非一整数。
在正式进入正则学习之前,先安利几个好用的校验和测试工具:
1. 在线正则结构分析工具 regexper。
regexper以直观的图例展现正则的结构,对分析和编写正则非常有帮助。
2. 正则在线测试工具regex101
regex101使用无需注册,打开即用。它不仅能快速响应匹配结果,设定各种匹配模式,还具有动态展现匹配过程功能的调试模式,对匹配过程以动画形式展现,是一款很赞的正则引擎。
3. 本地正则测试工具RegexBuddy
这是一个比较经典的正则工具,官网地址:http://www.regexbuddy.com/
RegexBuddy是个收费软件,不过网上有很多和谐版的下载,各位自行找度娘要吧。