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 属性:
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


    
                                        
    
  • 相关阅读:
    zTree学习笔记之展开树和收起树
    添优--史上超级全面的前端面试题大集合
    springboot2.0整合jpa
    Idea快捷键
    实用工具收藏
    nginx
    SQLServer锁的机制
    centos安装jenkins
    java8
    前端开发收藏
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351380.html
Copyright © 2011-2022 走看看