• perl6中的替换


    use v6;
    =begin pod
    perl6 中的替换用S///
    S有几个可选参数:
    
        :g —(长形式::global)全局匹配:替换掉所有的出现
        :i —不区分大小写的匹配
        :ii —(长形式: :samecase) 保留大小写:不管用作替换字母的大小写,使用原来被替换的字母的大小写
        :mm —(长形式::samemark) 保留重音符号:在上面的例子中,字母 o 上的分音符号被保留并被应用到替换字母 u 上
        :nth(n) —只替换第 n 次出现的
        :x(n) —至多替换 n 次(助记符: 'x' 作为及时)
        :ss —(长形式:samespace)保留空白类型:空白字符的类型被保留,而不管替换字符串中使用的是什么空白字符。在上面的例子中,我们使用换行作为替换,但是原来的空白被保留了。
    
        eg: $name ~~ S/AB/CD/
        当使用S/// 的时候, $name 被起了个叫做 $_ 的别名。
        S/// 非破坏性地在 $_ 身上执行了替换并返回那个结果字符串。这是智能匹配将要操作的东西。
        智能匹配,按照 Str 与 Str 相匹配的规则,会根据替换是否发生来返回 True 或 False(True 意味着没发生, False表示替换成功)
        所以, 这个S///只会返回True或False
    
        ~~ 智能操作符把它左边的东西起了个叫做 $_ 的别名,然后 ~~ 计算它右侧的东西,然后在右侧这个东西身上调用 .ACCEPTS($_) 方法。
        字符串的ACCEPTS()方法:
        $str.ACCEPTS('$name') => 如果$name跟$str相同, 测返回true, 反之返回false
        $name ~~ $str => $str.ACCEPTS($name)
        eg:
        > 'abc' ~~ 'abcd'
        False
        > 'abcd'.ACCEPTS('abc')
        False
        > 'abc' ~~ 'abc'
        True
        > 'abcd'.ACCEPTS('abcd')
        True
        >
    =end pod
    #在测试前, 我们先看一个例子
    > given 'abc' {say $_;}
    abc
    > given 'abc' {$_;}
    abc
    > do given 'abc' {$_;}
    abc
    >
    
    在given中, given的参数会自动转化为$_
    这样, 可们可以用这方法返回S///替换后的字符串
    > do given 'abc' {S/a/12345/;}
    12345bc
    > my $str = do given 'abc' {S/a/12345/;}
    12345bc
    > $str
    12345bc
    > my $str = S/a/666/ given '1234567890a'
    1234567890666
    >
    #除了用given也可以用For
    > for 'a' {say $_}
    a
    > my $str = do for 'abc' {S:i/A/6/}
    (6bc)
    >
    
    #关键是这个given/for 能把参数转化为$_
    
    
    除了S///替换,  还可以用方法:subst
    > 'abca'.subst: /a/, 6;
    6bca
    > 'abca'.subst: /a/, 6, :g;
    6bc6
    >
    > 'abca'.subst: 'a', 6, :g;
    6bc6
    > 'abca'.subst: 'a', 6;
    6bca
    >
    #第一个参数为正则或字符串, 第二个为要替换成的字符, 第三个跟S///一样, 可选参数, 如:g全局替换
    
    
    #捕获分组
    #subst的第二个参数可以为一个匿名函数, eg:
    
    > say 'meowmix'.subst: /me(.+)/, -> { "$0" };
    owmix
    #上面例子, 把第一个正则匹配到的全变成捕获后的东西, 也就是owmix
    
    > say 'abc123'.subst: /abc(d)/, -> { $0 };
    123
    >

     还有一个替换方法为: s

    小写的 s 会在原字符串上操作。

    大写的 S 一般用作无损替换。

    eg:
    
    $str ~~ s///;
    
    S/// given $str;
  • 相关阅读:
    原生态Vim使用快捷键
    Django 搭建博客记(二)
    Django搭建博客记(一)
    草稿
    骨骼动画的实现(OpenGL实现)
    场景内容的再现
    实现Ogre的脚本分离
    Bullet物理引擎在OpenGL中的应用
    linux fork进程请谨慎多个进程/线程共享一个 socket连接,会出现多个进程响应串联的情况。
    多开发机别名跳转脚本片段
  • 原文地址:https://www.cnblogs.com/perl6/p/6975683.html
Copyright © 2020-2023  润新知