• Shell编程——正则表达式


    示例: 

    可以使用wc命令统计这些单词的数量

     

    ♡♡​​​​字符“^”和“$”分别用于匹配行首和行尾,上面的意思就是匹配所有以a开头,t结尾的单词,两者可以不用同时使用 

    ♡♡​​​​ 在正则表达式中,句点“.”用于匹配除换行符之外的任意一个字符。例如 

    .at

    能够匹配出诸如cat/sat/#at等字符串。

    在这里既然句点表示上面的那个意思,那怎么匹配句点本身呢?

    ♡♡这里就需要转义字符“\”,“\”可以取消所有元字符的特殊含义,例如“\.”匹配句点“.”,“\[”匹配左方括号,“\\”用于匹配“\”

    很多时候,为了限定at前面的那个字符只能是小写字母,可以这样写正则表达式

    [a-z]at

     

    ♡​​​​​​​♡​​​​ 方括号“[]”用于指定一个字符集,无论“[]”中有多少东西,在实际工作时只能匹配其中一个字符。

    比如

    [abc]

    只能匹配a或b或c,而不能匹配ab,abc,bc或者3个字母中其他任意组合。

     

    ♡​​​​​​​♡使用连字符“-”描述一个范围,比如

    [a-zA-Z]

    表示匹配所有的英文字母,数字也可以用范围来指定[0-9]

     

    ♡​​​​​​​♡想要让[a-z]at能够严格地匹配一个单词,需要为它加上一对分隔符“\<”和“\>”.

    ​​​​

    为什么bat's也会被匹配进来呢?

    因为正则表达式中对单词的定义是:指两侧由非单词字符分隔的字符串。bat's符合,可以被匹配;如“a#$bat”分别由标点$和行尾分隔,符合单词的定义也可以被匹配

    非单词指的是字母、数字、下划线以外的任何字符。 

    如果去掉这个分割符的话,就会查找出下面这种情况

     

     ♡​​​​​​​♡​​​​用户有时候希望某个字符能够不止出现一次,下面是用于重复匹配的符号

    *重复0次或更多次
    +重复一次或更多次
    重复0次或1次
    {n}重复n此
    {n,}重复n次或更多次
    {n,m}重复不少于n次,不多于m次

    ♡​​​​​​​♡​​​​反义:“^”表示除了这个字符,其他都可以,例如

    [^wer]表示匹配除了w/e/r的所有字符;

    注意“^”在表示行首和反义时在位置上的区别,例如匹配所有不以字母y开头的行:^[^y]

    ♡​​​​​​​♡​​​​子表达式(分组):

    示例:(or){2,}表示匹配所有or重复2次或更多次的行。如果去掉or两边的括号,那么这个正则表达式匹配的是 字母o后面紧跟2个或更多字母r的行

    ♡​​​​​​​♡​​​​分支:以“|”竖线表示,例如^h|t$表示匹配以h开头或者t结尾的字母。

    再看Jan(uary| |\.)

    紧跟着开头三个字母Jan的是一个子表达式(用括号限定),两个分支元字符“|”分隔了三个字符串,分别是uary、空格、句点(注意描述句点需要使用转义符号“\”),这意味着January或Jan或Jan.这样的字符串都能被匹配。

     

     

  • 相关阅读:
    htaccess绕过上传实验
    【Android】-- 关于文本和视图的基本操作(设置内容、大小、颜色、宽高、间距、对齐方式)
    RISCV学习(2)玄铁C910处理器体验
    IoTDB Summit,12 月 3 日北京等你 | 专属马克杯免费获得
    六轴IMU估计自身在世界坐标系的位姿
    连续变量降维:主成分分析和因子分析
    HarmonyOS—低代码开发Demo示例
    Java新手小白入门篇 Java面向对象(八)
    Spring Cloud【SkyWalking服务环境搭建、微服务接入SkyWalking探针、Docker搭建Elasticsearch环境 】(十四)
    Cannot read property ‘pickAlgorithm‘ of null
  • 原文地址:https://blog.csdn.net/ligare/article/details/126585270