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//;}
12345bc
> my $str = do given 'abc' {S/a//;}
12345bc
> $str
12345bc
> my $str = S/a// given '1234567890a' >
#除了用given也可以用For
> for 'a' {say $_}
a
> my $str = do for 'abc' {S:i/A//}
(6bc)
> #关键是这个given/for 能把参数转化为$_ 除了S///替换, 还可以用方法:subst
> 'abca'.subst: /a/, ;
6bca
> 'abca'.subst: /a/, , :g;
6bc6
>
> 'abca'.subst: 'a', , :g;
6bc6
> 'abca'.subst: 'a', ;
6bca
>
#第一个参数为正则或字符串, 第二个为要替换成的字符, 第三个跟S///一样, 可选参数, 如:g全局替换 #捕获分组
#subst的第二个参数可以为一个匿名函数, eg: > say 'meowmix'.subst: /me(.+)/, -> { "$0" };
owmix
#上面例子, 把第一个正则匹配到的全变成捕获后的东西, 也就是owmix > say 'abc123'.subst: /abc(\d)/, -> { $ }; >

还有一个替换方法为: s

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

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

eg:

$str ~~ s///;

S/// given $str;

perl6中的替换的更多相关文章

  1. Word中批量替换软回车

    在平时工作中,有时候需要拷贝一些截取自网页上的文字,当选中后拷贝到Word中时,有时候在每行的结尾出现如下的符号,,这给后期文字的整理带来了很多不便,在此记录从网上获取的解决方法,以免遗忘和便于查找. ...

  2. SQL Server中批量替换数据

    SQL Server数据库中批量替换数据的方法 SQL Server数据库操作中,我们可能会根据某写需要去批量替换数据,那么如何批量修改替换数据呢?本文我们就介绍这一部分内容,接下来就让我们一起来了解 ...

  3. mysql中replace替换字符串更改方法

    MySQL中update替换部分字符串replace的简单用法 近日,遇到了需要将部分字符串替换为另外的字符,平时用的最多的是直接update整个字段值,在这种情况下效率比较低,而且容易出错.其实my ...

  4. perl6中的hash定义(2)

    use v6; , :b, :!c; say %ha; say %ha<a>; #这里不能用%ha{a}, {a}表示调用a()函数了, 在perl6中, {}有特别函义 say %ha{ ...

  5. vi中如何替换某字符成“回车”?

    vi中如何替换某字符成“回车”? 在 vi 中::s/,/^M/g (you need to type CTRL-V <CR> to get a ^M here)VIM - Vi IMpr ...

  6. Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式

    Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式 Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式 > ...

  7. 【RMAN】RMAN脚本中使用替换变量

    [RMAN]RMAN脚本中使用替换变量--windows 下rman全备脚本 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

  8. Excel-在整个工作簿中查找/替换

    13.在整个工作簿中查找/替换 调范围为:工作簿,默认是工作表:

  9. Perl中的替换(七)

    在Perl中使用s///进行替换操作,与m//进行查找操作类似. s/with (\w+)/against $1's team/;      ##第一个双斜线,表示被替代的文本.第二个双斜线,表示将替 ...

随机推荐

  1. delphi7中 OnDrawColumnCell 事件怎么用

    你问的这个事件应该是dbgrid控件中的吧?这个事件是在grid控件载入数据的时候触发的,至于你这个“怎么用”波及的范围太大了,呵呵!不知道如何说起!另外还是发一段相关的代码吧,这也是我之前提过问题, ...

  2. InnoDB,select为啥会阻塞insert?

    MySQL的InnoDB的细粒度行锁,是它最吸引人的特性之一. 但是,如<InnoDB,5项最佳实践>所述,如果查询没有命中索引,也将退化为表锁. InnoDB的细粒度锁,是实现在索引记录 ...

  3. 【python】使用枚举类

    当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 好处是简单,缺点是类型是int,并且仍 ...

  4. 获取当前路径下的所有文件路径 :listFiles

    获取当前路径下的所有文件路口 :listFiles

  5. 【bzoj2938】[Poi2000]病毒 AC自动机

    题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...

  6. 进程池-限制同一时间在CPU上运行的进程数

    if __name__=='__main__' :  为了区分你是主动执行这个脚本,还是从别的地方把它当做一个模块去调用. 如果是主动执行,则执行.如果是调用的,则不执行主体. 1. 串行:切记切记: ...

  7. [洛谷P4980]【模板】Polya定理

    题目大意:给一个$n$个点的环染色,有$n$中颜色,问有多少种涂色方案是的旋转后本质不同 题解:$burnside$引理:$ans=\dfrac1{|G|}\sum\limits_{g\in G}A_ ...

  8. 最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )

    Lasso回归模型,是常用线性回归的模型,当模型维度较高时,Lasso算法通过求解稀疏解对模型进行变量选择.Lars算法则提供了一种快速求解该模型的方法.Lars算法的基本原理有许多其他文章可以参考, ...

  9. 51nod 1554:欧姆诺姆和项链——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1554 题目: 有一天,欧姆诺姆发现了一串长度为n的宝石串,上面有五颜六色 ...

  10. ContestHunter暑假欢乐赛 SRM 03

    你们也没人提醒我有atcoderQAQ... A题曼哈顿距离=欧拉距离就是在同一行或者同一列,记录下i,j出现过的次数,减去就行,直接map过. B题一开始拿衣服了,一直以为排序和不排序答案是一个样的 ...