在Perl中使用正则表达式时,tr ///和s ///之间的区别是什么?

use*_*199 25 regex perl

我在想,当一个人应该用s///tr///与Perl的正则表达式时?

Can*_*ice 29

s/// 是替代:

$string =~ s/abc/123/;
Run Code Online (Sandbox Code Playgroud)

这将替换$string"123"中的第一个"abc ".

tr/// 用于音译:

$string =~ tr/abc/123/;
Run Code Online (Sandbox Code Playgroud)

这将$string用"1" 替换所有出现的"a" ,将所有出现的"b"替换为"2",并将所有出现的"c"替换为"3".

  • 不要忘记我们最喜欢的高尔夫推杆,`y ///`! (4认同)

mob*_*mob 13

tr///不是正则表达式运算符.s///使用另一个单个字符替换一个单个字符是合适的(并且更快),或者(使用d修饰符)替换具有零个字符的单个字符.

s///应该用于比狭窄用例更复杂的东西tr.


too*_*lic 7

来自perlop:引用和引用类似的运算符

请注意,tr不执行正则表达式字符类,例如\ d或[:lower:].tr运算符不等同于tr(1)实用程序.如果要在较低/较高的情况下映射字符串,请参阅lc和uc,并且通常在需要正则表达式时考虑使用s运算符.