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

时间:2010-09-03 17:42:47

标签: regex perl

我想知道在Perl中处理正则表达式时应该使用s///而不是tr///

3 个答案:

答案 0 :(得分:29)

s///代替:

$string =~ s/abc/123/;

这会将$string中的第一个“abc”替换为“123”。

tr///用于音译:

$string =~ tr/abc/123/;

这将在$string中将所有出现的“a”替换为“1”,将所有出现的“b”替换为“2”,并将所有出现的“c”替换为“3”。

答案 1 :(得分:13)

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

s///应该用于比tr的狭隘用例更复杂的任何内容。

答案 2 :(得分:7)

来自perlop: Quote and Quote-like Operators

  

请注意,tr不常规   表达式字符类如   \ d或[:lower:]。 tr运算符是   不等于tr(1)实用程序。   如果要在两者之间映射字符串   低/高的情况,见lc和uc,和   一般考虑使用s   操作员,如果你需要定期   表达式。