• Perl 学习笔记-正则表达式基础篇


    1.Perl中的正则表达式

      在Perl中叫做模式, 是一个匹配(或不匹配)某字符串的模板, 是一种小程序, 对于一个字符串, 要么匹配, 要么不匹配.

      使用简易模式: 将模式写在一对正斜线(/)中即可.

    2.元字符

       .  匹配非换行符   的任何单字符, 需要注意的是转义字符如   算做一个字符. 匹配  .  应该使用  . 

        匹配前面的内容0次或多次, 使用  .* 表示匹配任意单字符任意次(这种模式也称为捡破烂模式)

       +  匹配前面的内容至少1次

       ?  匹配前面的内容至多1次

    3.模式分组

      使用圆括号 () 来分组, 它也是一个元字符.

      分组可以实现反向引用, 如 1 就是在使用第一个分组, 2 使用第二个分组 如:  /(.)1/ 表示匹配连续2个相同的字符, 使用  /(.)(.)21/ 可以得到4个字符的回文串; 分组的依据是左括号从左到右的序号, 从1开始, 如连续4个字符回文串也可以写作 /((.)(.)32)/ 

      分组编号的处理: Perl的原则是贪心取最大值,  所以111 是第111号组, 如果只是想用1, 而且在后面匹配字符"11",那就会冲突;  可以使用g{N}来避免,  其中当N为正数时, 表示从左到右的第N个组,  当为负数时, 表示相对于当前从右往左数的第N个组. 

    4.选择匹配

      使用符号 |  , 只要在多个模式中有一个匹配即可, 由于一个模式要么匹配,要么不匹配, 一个字符串一般只匹配一个模式, 所以没有 类似于取反和求交集的逻辑操作.

    5.字符集

      定义: 指一串可能出现的字符集合, 写在 [] 中表示, 它只匹配单个字符, 但是可以使字符集中的任何一个; 如  [a-cw-z]   [a-zA-Z0-9_] 

      简写:  [0-9] <=> d     [A-Za-z0-9_] <=> w  [f ] <=> s #主要 后面有一个空格 

      反义简写:  [^d] [^w] [^s] 分别表示非数字, 非单词字符, 非空白符; 对应等价于: D  W  S

      注意:  ^ 在字符集中才表示反义简写, 但是在模式中表示开头, 结尾对应  $  , 如  /^perl/ 表示以perl开头的字符串

    6.正则表达式使用

      匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)
      替换:s/<pattern>;/<replacement>;/
      转化:tr/<pattern>;/<replacemnt>;/

      符号:  =~  表示匹配,  !~  表示不匹配

    $roger = "AABCDEF";
    $Roger = "AABCDEF";
    $count = $roger =~ tr/A/H/c; # /c表示将不匹配的字符替换, 同理有/d表示把所有匹配的字符全部替换
    $count2 = $Roger =~ tr/A/H/; # 将匹配的字符替换,省略了/d 即: tr/A/H/d;
    print $count."	".$roger."
    "; #5    AAHHHHH
    print $count2."	".$Roger."
    "; #2    HHBCDEF
    $roger = "AABCDEF";
    $count = $roger =~ tr/A/H/ds; # /s表示要替换的字符串中如果持续连续两个相同字符,就去掉冗余的
    print $count."	".$roger."
    "; #2    HBCDEF

      2种用法:

    $roger = "AABCDEF";
    $count = $roger =~ tr/A//; # 等价于tr/A/A/; 统计模式出现的次数, 不会改变原串
    print $count."	".$roger."
    "; #2    AABCDEF
    $count = $roger =~ tr/[A-Z]/[a-z]/;  #替换成小写
    print $count."	".$roger."
    "; #7    aabcdef

       可以在替换的时候使用反向引用 s/(word1)(word2)/$2$1/  这样可以交换字符串的word1和word2,注意后面是$2 $1

  • 相关阅读:
    内网穿透(Frp)-拯救没有公网IP的你
    用Windows远程桌面连接树莓派的方法
    TensorFlow 1.9开始支持树莓派
    树莓派制作遥控小车-新手教程
    Layui 一个页面包含多个table时不展示分页条
    MVC 通过@符号把数据赋值给jQuery对象
    jQuery 批量为表单元素赋值
    layui分页组件,一直在调用方法的解决办法
    layui 表格复选框不居中解决办法
    JQuery 解决遮罩层下内容可以滚动问题
  • 原文地址:https://www.cnblogs.com/roger9567/p/4534609.html
Copyright © 2020-2023  润新知