我想知道在Perl中处理正则表达式时应该使用s///
而不是tr///
?
答案 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 操作员,如果你需要定期 表达式。