zoukankan      html  css  js  c++  java
  • Perl 正则详述

    模式匹配,在字符串中寻找特定序列的字符


    指定模式:由斜线包含,/def/即模式def。


    匹配操作符 =~、!~


    模式匹配的3种类型:
    m//模式匹配,s///匹配并替换(类似linux的sed命令),
    tr///逐一替换,翻译




    +: 一个或多个相同的前导字符(模式). 如:/de+f/ 匹配的是def,deef,deeeef等。


    如/d[eE]+/,匹配de,dee,dE,dEE,deE,dEe.


    * 匹配0个,1个或多个相同字符


    ? 匹配0个或1个该前一个字符


    . 匹配除换行外的所有单个字符,通常与*合用


    .* 所有任意数量字符。 与前一字符结合,可不出现字符。


    贪婪规则和懒惰规则:




    贪婪规则: 尽量匹配尽可能多的相同字符,如/ab+/ 在字符串中匹配abbc中匹配的将是abb 而不是ab.


    若表达式中出现两个重复符号,perl 遵守贪婪规则


    [grid@devrac1 ~]$ cat a1.pl 
    $_="a xxx c xxxx c xxxx d";
    if ( $_ = ~ /a.*c.*d/){print "111111 "};


    [grid@devrac1 ~]$ perl a1.pl 
    111111


    “.*”会和第二个c之前的所有字符符合。
     * + ? 都是贪婪的


    在重复符号后加个问号,可以让它变得不贪心:
    /a.*?c.*d/;
    "a.*?c"会和最少的a,c之间字符匹配


    [grid@devrac1 ~]$ cat a1.pl 
    $data='abbbbbbbbbbbbg';


    if ($data =~ /ab(.+?)g/){print "1111 "};
    [grid@devrac1 ~]$ perl a1.pl 
    1111


    .+




    .*? 0个或多个字符开始匹配


    .+? 表示至少一个字符


    .+?
    ??




    [grid@devrac1 ~]$ cat a1.pl 
    $data='abbbbbbbbbbbbgabbbbbbbbg';


    if ($data =~ /ab(.*)g/){print "$1 "};
    [grid@devrac1 ~]$ perl a1.pl 
    bbbbbbbbbbbgabbbbbbbb


    这里的$1 表示模式1




    懒惰规则:模式匹配只要找到一个就停止。不再继续匹配






    [grid@devrac1 ~]$ cat a1.pl 
    $data='abbbbbbbbbbbbgabbbbbbbbg';


    if ($data =~ /ab(.*?)g/){print "$1 "};
    [grid@devrac1 ~]$ perl a1.pl 
    bbbbbbbbbbb

























































  • 相关阅读:
    cross-domain
    【转】React、Vue访问NotFound
    Flutter环境配置
    antd遇见的坑
    npm源设置
    React中的生命周期函数
    【备忘】javascript原型、Function、eval、闭包、json处理、类、arguments不定
    ADB获取手机信息
    selenium操作
    操作execl
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351862.html
Copyright © 2011-2022 走看看