Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17371
  • 博文数量: 6
  • 博客积分: 1616
  • 博客等级: 上尉
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-19 16:14
文章分类
文章存档

2010年(6)

我的朋友

分类:

2010-04-19 16:43:23

LVALUE =~ tr/SEARCHLIST/REPLACEMENTLIST/cds
    tr/SEARCHLIST/REPLACEMENTLIST/cds
y/// 就是 tr/// 的同义词。

这个操作符不使用模式。这个操作符逐字符地扫描一个字串,然后把每个在 SEARCHLIST (不是正则表达式)里出现的字符替换成对应的来自 REPLACEMENTLIST(也不是替换字串)的字符。但是它看上去象 m// 和 s///,你甚至还可以和它一起使用 =~ 和 !~ 绑定操作符,因此我们在这里描述它。(qr// 和 split 都是模式匹配操作符,但是它们不能和绑定操作符一起使用)

转换返回替换或者删除了的字符个数。如果没有通过 =~ 或者 !~ 操作符声明的字串,那么使用 $_ 字串。SEARCHLIST 和 REPLACEMENTLIST 可以用一个划线定义一个顺序字符的范围:

如果声明了 /c 修饰词,那么 SEARCHLIST 里的字符会被求补;也就是说,实际的搜索列表包含所有不在 SEARCHLIST 里的字符。如果是 Unicode,这样可能会代表许多字符,不过因为它们是逻辑存储的,而不是物理存储,所以你不用害怕会用光内存。

/d 修饰词把 tr/// 转换成所谓的“过滤吸收”操作符:任何由 SEARCHLIST 声明的但是没有在 RELPACEMENTLIST 里给出替换的字符将被删除。(这样比一些 tr(1) 程序的性质显得更加灵活,那些程序删除它们在 SERACHLIST 里找到的任何东西。)

如果声明了 /s 修饰词,被转换成相同字符的顺序字符将被压缩成单个字符。

如果使用了 /d 修饰词,那么 RELPACEMENTLIST 总是严格地解释成声明的样子。否则,如果 REPLACEMENTLIST 比 SEARCHLIST 短,则复制 REPLACEMENTLIST 的最后一个字符,直到足够长为止。如果 RELPACEMENTLIST 为空,则复制 SEARCHLIST,这一点虽然奇怪,但很有用,尤其是当你只是想计算字符数,而不是改变它们的时候。也有利于用 /s 压缩字符。


perl中s///和tr///的区别

s///: 替换运算符。s/searchpattern/repalcement/;默认搜索$ _,找出searchpattern,并且用replacement来替换整个匹配的正则表达式。该运算符返回匹配的数量或进行替换的数量,如果没有进行任何匹配,则返回0。

当然也可以指定某个变量,如$fuckperl=~s/searchpattern/repalcement/; 另外,替换运算符也可以使用非斜杠(/)的界限符,如s###.

转换操作符tr///的作用与替换运算符有些类似,不过它并不使用正则表达式,而且它的运行方式完全不同。转换操作符的句法如下所示:tr/searchment/repalcement/;是把searchment的第一个字符换成replacement的第一个字符,searchment的第二个字符换成replacement的第二个字符,类推 ~~~~~~~

即:转换操作符tr/ / /用于搜索一个字符串,找出searchlist中的各个元素,并用replacementlist中的对应元素对它们进行替换。如果replacementlist是空的,或者与searchlist相同,那么tr/ / /将计算并返回匹配的字符。目标字符串并不被修改。
阅读(1826) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~