美文网首页正则表达式学习笔记
【Linux操作】---正则表达式学习笔记(三)

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

作者: 卡布达b1 | 来源:发表于2020-05-14 11:05 被阅读0次

    前言:通过前两篇的学习,我们已经掌握了如何利用正则表达式去"匹配位置"或者"匹配连续次数",在这一篇中,我们来总结一下正则中其他的一些常用符号。
    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];

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

    相关文章

      网友评论

        本文标题:【Linux操作】---正则表达式学习笔记(三)

        本文链接:https://www.haomeiwen.com/subject/jbpznhtx.html