zoukankan      html  css  js  c++  java
  • 第5章 正则表达式

    <pre name="code" class="sql"> 下面的就是这些字符:
    
     | ( ) { ^ $ * + ? .
    
    
    反斜杠本身是一个元字符,因此如果你要匹配一个文本的反斜杠,你要在反斜杠前面放一个反斜杠:\
    
    
    反斜杠(平时正常) 的字母数字字符作用相反,它把该文本字符变成某些特殊的东西。无论什么时候你看到下面的双字符序列:
    
    
    /(bar){3}/  这样将和"barbarbar"匹配  
    
    redis01:/root/big# cat a1.pl 
    $var='barbarbar11';
    if ($var =~/(bar){3}/){print "11111
    ";};
    redis01:/root/big# perl a1.pl
    11111
    
    5.2  模式匹配操作符:
    
    m// 用于匹配一个模式 (如果把斜杠用做分隔符,你可以把m// 写成//,不用写m.)
    
    
    $haystack =~ m/meedle/ # 匹配一个简单模式
    
    $haystack =~ /needle/ # 一样的东西
    
    
    redis01:/root/big# cat a2.pl 
    $var='meedlexx1';
    if ($var =~ m/meedle/){print "11111111
    "};
    if ($var =~ /meedle/){print "22222222
    "};
    redis01:/root/big# perl a2.pl 
    11111111
    22222222
    
    
    
    每次成功匹配了一个模式(包括替换中的模式),操作符都会把变量$`, $&和$' 分配设为为匹配内容左边内容,
    
    
    
    匹配的内容和匹配内容的右边的文本。这个功能对于把字符串分解为组件很有用:
    
    
    
    为了有更好的颗粒度和提高效率,你可以用圆括弧捕捉你特别想分离出来的部分. 每对圆括弧捕捉与圆括弧内的模式相
    
    匹配的子模式。圆括弧有左圆括弧的位置从左到右依次排序:对应那些子模式的子字串在匹配之后可以通过
    
    顺序的变量$1,$2,$3 等等获得:
    
    
    $`,$&,$' 和排序的变量都是全局变量,它们隐含地局部化为属于此闭合的动态范围。
    
    
    它们的存在直到下一次成功的匹配或者当前范围的结尾,以先到者为准。
    
    
    一旦Perl 认为你的程序的任意部分需要$`,$&或$',它就会为每次模式匹配提供这些东西。
    
    这样做会微微减慢你的程序的速度。Perl 同样还利用类似的机制生成$1,$2 等等,
    
    因此你也会为每个包含捕捉圆括弧的模式付出一些代价。
    
    
    5.2.1  模式修饰词:
    
    
    修饰词                         含义
    
    /i                              忽略字母的大小写(大小写无关)
    
    /s                             令.匹配换行符并且忽略不建议使用的$*变量
    
    
    通常.元字符"." 匹配除了换行符以外的任何单个字符,因为它的传统含义是匹配一行内的某个字符。
    
    不过,带有/s时,"." 元字符也可以匹配一个换行符,因为你已经告诉Perl 忽略该字符串可能包含多个换行符的情况
    
    
    redis01:/root/big# cat a3.pl 
    $var="abc
    efg
    123";
    if ($var =~/abc.efg/){print "111111111
    "};
    if ($var =~/abc.efg/s){print "22222222
    "};
    redis01:/root/big# perl a3.pl 
    22222222
    
    让.号可以匹配 
    
    
    
    /m                        令^和$匹配下一个嵌入的
    
    
    
    5.2.2 m// 操作符(匹配)
    
    m// 操作符搜索变量EXPR 里面的子串,查找PATTERN 。如果使用/或?做分隔符,那么开头的m是可选的。
    
    
    ? 表示只匹配前者一次:
    
    
    5.2.3 s/// 操作符(替换)
    
    
    5.2.3.1 顺便修改一下子串:
    
    
    
    s/^s+//; # 丢弃开头的空白
    
    s/s+$//; # 丢弃结尾的空白
    
    s/s+/ /g; # 压缩内部的空白
    
    
    5.3  元字符和元符号:
    
    
    
    到现在你应该已经看到这样的事实,就是这些符号并不是普通的函数调用或者算术操作符,正则表达式本身就是嵌入Perl的小型语
    
    言。
    5.3.1  元字符表:
    
    
    
    
    
    符号      原子性                       含义
    
    ...       变化                        反逃逸下一个非字母数字字符,转义下一个字母数字(可能)
    
    
    ...|...    否                          可选(匹配前者或者后者)
    
    (...)      是                           分组(当作单元对待)
    
    
    至于量词,我们会在它们自己的章节里详细描述,量词表示前导的原子(也就是说,单字符或者分组)应该匹配的次数,它们列在表
    
    5-5中。
    
    表5-5 ,正则量词:
    
    
    
    
    
    量词                  原子性                            含义
    
    *                      否                               匹配0或者更多次数(最大)
    
    +                      否                               匹配或者更多次数(最大)
    
    
    ?                     否                               匹配1或者0次
    
    
    5.3.3  通配元符号:
    
    
    点号元字符常和量词一起使用。.* 匹配尽可能多的字符,而.*? 匹配尽可能少的字符。
    
    
    5.4.3  Unicode 属性:
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


    
                                        
    
  • 相关阅读:
    ZOJ 1002 Fire Net (火力网)
    UVa OJ 117 The Postal Worker Rings Once (让邮差只走一圈)
    UVa OJ 118 Mutant Flatworld Explorers (变体扁平世界探索器)
    UVa OJ 103 Stacking Boxes (嵌套盒子)
    UVa OJ 110 MetaLoopless Sorts (无循环元排序)
    第一次遇到使用NSNull的场景
    NSURL使用浅析
    从CNTV下载《小小智慧树》
    NSDictionary and NSMutableDictionary
    Category in static library
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351380.html
Copyright © 2011-2022 走看看