正则表达式学习笔记

【Linux操作】---正则表达式学习笔记(三)

2020-05-14  本文已影响0人  卡布达b1

前言:通过前两篇的学习,我们已经掌握了如何利用正则表达式去"匹配位置"或者"匹配连续次数",在这一篇中,我们来总结一下正则中其他的一些常用符号。
1..*
首先来介绍两个好兄弟,.在正则中表示匹配一个任意字符,这个任意字符可以是字母、数字、以及其他符号。而*在正则中表示匹配任意个数的任意字符,也就是说不管有多少任意字符,都会全部匹配到,大家最熟悉的可能就是*在Linux中作为通配符出现。

. 表示匹配一个任意字符
* 表示匹配任意个数的任意字符

换言之,你在正则中输入N多个...,效果等同于一个*
示例:
比如我现在有一个test.txt,内容如下:

a12
a123
a 456
aabbb
b123
b 456

匹配以字母a开头的连续三个任意字符:


a加三个任意字符

匹配以字母a开头的连续四个任意字符:


a加四个任意字符 可以看到,就算是空格,也是一个任意字符,所以也会被算在匹配里。

2.匹配任意字母
通过上面.的使用,我们知道可以匹配任意字符,但是如果我想继续缩小匹配范围呢?比如,我只想匹配test.txt文件中以a开头同时后面三个字符全部为字母的情况?
匹配以字母a开头的连续三个任意字母:

a加三个任意字母
可以看到,命令里的\{3\}就表示连续匹配三次,而前面的[[:alpha:]]在正则就表示匹配一个任意字母。只要字母a后面三个连续字符中有一个不是字母(是数字、空格、或者其他字符时),就不会被匹配到。

3.匹配任意数字
现在,聪明的你肯定可以举一反三了。如果是想匹配任意一个数字,只需要在正则中加入[[:digit:]]就可以实现了。
比如匹配字母a已经后面的连续两个数字,或者三个数字:

a加2个连续数字,或3个连续数字

此外:
[[:lower:]]等价于[a-z],可以匹配任意的小写字母;
[[:upper:]]等价于[A-Z],可以匹配任意的大写字母;
[[:alpha:]]还等价于[a-zA-Z],可以匹配任意字母,不区分大小写;
[[:digit:]]等价于[0-9],可以匹配0到9的任意一个数字;

4. []的含义
既然我们知道了如何限定字母或者数字的匹配,那么你有没有思考过[]在正则中的作用呢?
其实不难理解,[],也就是方括号,其实是用来告诉我们的计算机程序(比如grep),我要匹配什么样的内容。
所以比如一串字符“abcdefg”,我只想匹配中间的“cde”,那么就可以使用[cde]来匹配。
所以:

[a-z],其实表示的就是[abcdefghijklmnopqrstuvwxyz];
[A-Z],其实表示的就是[ABCDEFGHIJKLMNOPQRSTUVWXYZ];
[0-9],其实表示的就是[0123456789];

怎么样?这样学正则是不是感觉就很简单轻松了呢。很多教程都会一上来就让你去背长长的正则表,却不教你怎么去理解它,这样反而更耽误时间!

上一篇下一篇

猜你喜欢

热点阅读