正则表达式是一种模式模板,可以用来过滤文本。在各种编程语言中都可使用。
1. 纯文本:
如果正则表达式只由纯文本组成,那么匹配的结果就包含表达式的内容。如果正则表达式是'es',那么'test'、'destination'、'restaurant' 都可以匹配到。
2. 元字符:. * [ ] ^ $ { } \ + ? | ( )
这些是正则表达式中的特殊字符,如果需要匹配自身,需要进行转义。下边分别对这些元字符进行讲解:
① 点号:匹配一个任意字符
② 方括号:在方括号中间的字符组成字符组,匹配字符组中任意一个字符,一位。例如:[0-9] 表示 0-9 的任意一个数字,[abc] 表示a、b、c的任意一个,如果想排除字符组的内容,使用[^字符],比如[^/] 表示除斜杠外的任意字符
③ 锚字符(^和$):标示字符的开始和结尾,可以分别使用
④ 星号:对星号前一个字符进行任意次匹配(0到正无穷)
⑤ 加号:对正号前一个字符进行1到正无穷次匹配
⑥ 问号:对问号前一个字符进行0或1次匹配
⑦ 花括号:指定字符次数,{m} 代表字符出现 m 次,{m,} 代表字符出现 m 次或更多次,{m,n} 代表字符出现 m 到 n 次
⑧ 竖线:代表“或”
⑨ 圆括号:对字符进行分组,可以把分组中的字符作为整体来处理。可以分多个组,后边可以使用数字指定第几个组来使用。(exp) 代表匹配 exp 并记录下来,(?:exp) 代表只匹配不记录, (?<name>exp) 代表使用 name 给组命名,其他效果和 (exp) 一样。
⑩ 反斜杠:转义。以上这些元字符如果想匹配自身,都需要使用反斜杠来转义
3. 预定义字符集:\d \D \s \S \w \W \b \B \A \Z
① \d 代表数字 [0-9]
② \D 代表非数字 [^\d]
③ \s 代表空白字符 [<空格>\t\r\n\f\v],其中 \t 代表水平制表符,\r 代表回车符,\n 代表换行符, \f 代表换页符,\v 代表垂直制表符
④ \S 代表非空白字符 [^\s]
⑤ \w 代表单词字符 [A-Za-z0-9_]
⑥ \W 代表非单词字符 [^\w]
⑦ \b 代表单词的头或尾,类似^ $,例如:'\bthe\b' 只能匹配 the
⑧ \B 代表不是单词的头或尾,例如:'\Bthe\B' 可以匹配 another,但不能匹配 the
⑨ \A 代表字符串的开头
⑩ \Z 代表字符串的末尾
4. 贪婪与非贪婪:*? ?? +?
这个特性在使用 * ? + 时会有影响。默认是贪婪匹配,即匹配能匹配的最长长度。例如,正则表达式为'1.*3',要匹配的是'123123',那么就会匹配出完整的123123。如果指定了非贪婪模式,只要加个问号即可,将正则表达式改为'1.*?3',匹配到的就会是123。问号和加号的非贪婪模式也是增加一个问号(?? +?)。
5. 零宽度断言:
(?=exp) 匹配 exp 前面的位置,例如:\b\w+(?=tion\b) 匹配 location,destination 的时候结果是 loca,destina
(?<=exp) 匹配 exp 后面的位置,例如:(?<=\bsp)\w+\b 匹配 speak,sports 的时候结果是 eak,orts
(?!exp) 匹配后面跟的不是 exp 的位置,例如:\bloca(?!tion\b) 不会匹配 location,但可以匹配local
(?<!exp) 匹配前面的不是 exp 的位置,例如:(?<!\bloca)tion\b 不会匹配 location,但可以匹配 destination
与正则表达式关系最紧密的应该就是 grep 命令了,可以看看我的另一篇文章: