zoukankan      html  css  js  c++  java
  • smix到底是个啥?Perl的正则表达式匹配模式

    最近在研究一个perl项目,临时学习了一下perl语法,强行看项目源码。因为总是见到各种正则表达式后面接smxi之类,虽然知道是匹配模式,但脑子里毫无概念。所以特地去学习了一下。
    以上为背景。

    Perl 正则表达式的匹配模式

    先举个栗子:
    $var =~ s/regexp/place/smx
    Perl正则表达式的匹配模式跟它的操作符有关。操作符主要就是m//,s///,tr///三种。

    1. m// 查找匹配,m可以省略
      • i 忽略大小写,无需解释
      • s 在这个模式下 . 可以匹配换行符 。也就是说如果你匹配的文本超过多行,而你有没有s修饰符,那匹配到换行的时候就结束了。另外一个使用它的主要原因是

    /s 修饰词同样还令 Perl 忽略我们已经不鼓励使用的 $* 变量,我们也希望你也忽略。
    + m 令 ^ 和 $ 匹配下一个嵌入的 。我们举例子来说,有一个字符串Hello world, m/^wor|llo$/匹配失败,而m/^wor|llo$/m能匹配成功.
    + x 忽略(大多数)空白并且允许模式中的注释。这个是最好玩的,你可以在正则里换行加空格加注释,尽情修饰。但是千万注意不要混入了你所使用的定界符

            m{
                w+:        # 匹配一个词和一个{冒号}。
            }x;
            #注意注释文字里的大括号。这个会报错
    
    + **`g`**    全局查找。通俗的说就是不加g匹配成功一次就会结束,加了g就会一直匹配查找直到结束。
    
    1. s/// 查找替换

      • i

      • s

      • m

      • x

      • g 全局查`找替换。通俗的说就是不加g只会查找替换一次,加了g就会一直查找替换直到结束。

      • e 表示第二个字符串是个可执行的(executable)表达式。废话少说上代码

          $replace = 'ABC';
          $search = 'abcdef';
        
          #$search =~ s/def/$replace.'DEF'/;    
          # abcABC.'DEF'
          $search =~ s/def/$replace.'DEF'/e;    
          # abcABCDEF
        
    2. tr/// 转换。看起来跟上面2个差不多,实际上用法完全不一样.. 好吧,我也不是很明白,暂时没用上,点到为止。

      • c 与SEARCHLIST为补。
      • d 删除找到的但是没有替换的字符
      • s 消除重复的字符。

    ========

    一些perl正则的经典用法

    $string = "password=xyzzy verbose=9 score=0";
    
    %hash = $string =~ /(w+)=(w+)/g;
    #%hash = (password => "xyzzy", verbose => 9, socre => 0);
    
    $hobbit = 'Bilbo';
    ($lotr = $hobbit ) =~ s/Bilbo/Frodo/g;
    # $lotr => 'Frodo';    替换
    # $hobbit => 'Bilbo';    保持
  • 相关阅读:
    再谈CLR:值类型按照引用传递(以及与装箱拆箱的区别)
    Silverlight的跨站策略和跨站策略文件
    再谈CLR:MSCorEE.dll文件的奥秘
    再谈CLR:如何通过代码获取程序集所引用的程序集信息
    再谈方法的动态调用
    Silverlight隔离存储(续)
    支持取消操作和暂停操作的Backgroundworker
    单件模式(Singleton)和锁定(lock)
    在SharePoint服务器中执行备份和还原
    如何:将 TraceSource 和筛选器与跟踪侦听器一起使用(转载)
  • 原文地址:https://www.cnblogs.com/dapianzi/p/7064137.html
Copyright © 2011-2022 走看看