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;

最新文章

  1. Select count(*)和Count(1)的区别和执行方式
  2. MySQL性能优化——索引
  3. 15个实用的CSS在线实例教程
  4. MySQL语句进行分组后的含有字段拼接方法
  5. VC调用系统的调色板
  6. js 设置 获取css样式
  7. 【题解】A-B
  8. QT对话框中show和exec的区别
  9. JAVA IO分析一:File类、字节流、字符流、字节字符转换流
  10. javascript闭包以及闭包的作用
  11. Egg.js
  12. 高通 MSM8K bootloader之一: SBL1
  13. ERC20数字货币ProxyOverflow存在漏洞
  14. Docker学习笔记-Docker for Windows 安装
  15. Java自带RPC实现,RMI框架入门
  16. IdentityServer4 中文文档 -9- (快速入门)使用客户端凭证保护API
  17. ICCV2013 录用论文(目标跟踪相关部分)(转)
  18. UIWebview交互之自己定义传值跳转
  19. Linux kernel pwn notes(内核漏洞利用学习)
  20. HttpContext.Current.Server.MapPath("/") 未将对象设置到对象的实例异常。

热门文章

  1. CSS设计指南之CSS三种机制:继承、层叠和特指
  2. WebKit 源码分析 -- loader
  3. MySQL、HBase、ES的特点和区别
  4. 关于对 NUMA 理解(学习笔记,便于以后查阅)
  5. BZOJ3680 & 洛谷1337:[JSOI2004]平衡点/吊打XXX——题解
  6. AOJ 7.Redraiment猜想
  7. SQL_MODE
  8. jq的$.each遍历数组
  9. UIColor延伸:判断两个颜色是否相等
  10. hdu 1698 线段树 区间更新 区间求和