攻略尽在正则: 揭秘位置匹配的正确姿势
2024-02-23 12:17:30
正则表达式是匹配模式,要么匹配字符,要么匹配位置。请记住这句话。
然而大部分人学习正则时,对于匹配位置的重视程度没有那么高。
本章讲讲正则中那些用来匹配位置的东东,同时也介绍几个有用的特殊字符,最后顺便聊聊正则表达式的执行引擎。
一、匹配位置的特殊字符
1、^
这个字符相信各位都不陌生。其作用是匹配字符串的开头,但不要将其与之混淆。
字符串的开头包括两层含义:
1)多行模式下,字符串的每一行的开头。
2)单行模式下,整个字符串的开头。
在大多数情况下,我们使用单行模式,因此^匹配字符串的开头。
2、$
这是一个与^相对应的位置匹配符。其作用是匹配字符串的结尾。
与^类似,$在多行模式下,表示每一行的结尾;在单行模式下,表示整个字符串的结尾。
3、\b
\b是一个比较特殊的位置匹配符。其作用是匹配单词边界。
何为单词边界呢?此处所说的单词边界是指由一个字母字符和一个非字母字符组成的字符序列。
反过来亦成立,即一个非字母字符和一个字母字符组成的字符序列,也是单词边界。
例如,在一个字符串中,“123abc”和“abc123”均为单词边界,“ab3c”和“3abc”亦为单词边界。
二、执行引擎
正则表达式的执行过程分为两个阶段:
1、编译
正则表达式是一个字符串,但它并不是计算机能够直接识别的。因此,在使用正则表达式之前,需要先将其编译成计算机能够识别的形式。
编译过程就是将正则表达式中的字符和符号转换为计算机能够理解的指令。
2、执行
编译完成之后,就可以执行正则表达式了。执行过程就是将编译好的正则表达式与目标字符串进行匹配。
匹配过程从目标字符串的开头开始,逐个字符地与正则表达式进行比较。
如果目标字符串中的某个字符与正则表达式中的某个字符或符号匹配,则匹配过程继续进行。
否则,匹配过程失败。
通过不断的匹配和失败,最终找到与正则表达式完全匹配的子字符串。
三、如何撰写正则表达式
1、明确需求
在开始撰写正则表达式之前,首先需要明确自己的需求。
即要匹配什么样的字符串,以及这些字符串的特征是什么。
2、选择合适的正则表达式语法
正则表达式有多种不同的语法,每种语法都有自己的特点。
在选择正则表达式语法时,需要考虑匹配任务的复杂程度、目标平台的限制等因素。
3、逐个击破
在撰写正则表达式时,不要试图一口吃成一个胖子。
可以将匹配任务分解成多个子任务,然后逐个解决。
这样可以大大降低正则表达式的复杂度,提高可读性和可维护性。
4、测试和调试
在撰写完正则表达式之后,需要对其进行测试和调试。
可以使用正则表达式在线测试工具来测试正则表达式是否能够正确匹配目标字符串。
如果正则表达式没有达到预期的效果,可以对其进行修改和调整,直至达到满意的效果。