Perl 6 中的 subst

作者: 焉知非鱼 | 来源:发表于2016-10-06 00:17 被阅读21次

    (Str) 方法 subst

    subst 取的是单词 substitution(替换)的前5个字符, 意为替换之意。

    multi method subst(Str:D: $matcher, $replacement, *%opts)
    

    返回被调用的那个字符串, 其中 $matcher$replacement 给替换掉了(或者返回原来的字符串, 如果没有找到匹配的话)。

    subst 有一个「就地」替换的句法变体, 它被拼写为 s/matcher/replacement/

    $matcher 可以是一个正则表达式, 或者一个字符串字面值。 Cool 类型的非字符串 matcher 会被强转为字符串以用于字面上的匹配。

    my $some-string = "Some foo";
    my $another-string = $some-string.subst(/foo/, "string"); # gives 'Some string'
    $some-string.=subst(/foo/, "string"); # in-place substitution. $some-string is now 'Some string'
    

    replacement 可以是一个闭包:

    my $i = 41;
    my $str = "The answer is secret.";
    my $real-answer = $str.subst(/secret/, {++$i}); # The answer to everything
    

    下面是 subst 其它用法的例子:

    my $str = "Hey foo foo foo";
    $str.subst(/foo/, "bar", :g);         # 全局替换 - 返回 Hey bar bar bar
    
    $str.subst(/foo/, "no subst", :x(0)); # 有针对性的替换。要替换的次数. 返回未修改过的字符串.
    $str.subst(/foo/, "bar", :x(1));      # 只替换第一次出现。
    
    $str.subst(/foo/, "bar", :nth(3));    # 单独替换第 n 个匹配. 替换第三个 foo. 返回 Hey foo foo bar
    

    第三个参数传递给散列, 例如 :g 被吞噬参数 *%opts 接收, 意为 g => True
    其中的 :nth 副词拥有可读的长得像英语那样的变体:

    say 'ooooo'.subst: 'o', 'x', :1st; # xoooo
    say 'ooooo'.subst: 'o', 'x', :2nd; # oxooo
    say 'ooooo'.subst: 'o', 'x', :3rd; # ooxoo
    say 'ooooo'.subst: 'o', 'x', :4th; # oooxo
    

    subst 还支持下面的副词:

    short long meaning
    :g :global 尽可能多次地替换
    :nth(Int|Callable) 只替换第n次匹配; 别名: :st, :nd, :rd, 和 :th
    :ss :samespace preserves whitespace on substitution
    :ii :samecase 替换时保留大小写
    :mm :samemark 保留字符标记(e.g. 'ü' replaced with 'o' 会导致 'ö')
    :x(Int|Callable) substitute exactly $x matches

    注意, 只有在 s/// 形式中 :ii 暗指 :i:ss 暗指 :s. 在方法的形式中 :s:i 修饰符必须添加到正则表达式中, 而非添加到 subst 方法调用中。

    相关文章

      网友评论

        本文标题:Perl 6 中的 subst

        本文链接:https://www.haomeiwen.com/subject/rtreyttx.html