我想知道在使用Perl中的正则表达式时,何时应该使用s///
而不是tr///
?
s///
用于替换:
$string =~ s/abc/123/;
这将会用 "123" 替换在 $string
中第一个出现的 "abc"。
tr///
用于替换字符:
$string =~ tr/abc/123/;
这将把 $string
中所有的 "a" 替换为 "1",所有的 "b" 替换为 "2",所有的 "c" 替换为 "3"。
tr///
不是一个正则表达式操作符,它适用于将一个单一字符替换为另一个单一字符的情况(且比s///
更快),或者使用d
修饰符将单个字符替换为零个字符。
对于除了tr
的狭窄用例之外的任何更复杂的情况,应该使用s///
。
请注意,tr不支持正则表达式字符类,例如\d或[:lower:]。tr运算符不等同于tr(1)实用程序。如果您想在大小写之间映射字符串,请参见lc和uc,并且一般情况下,如果需要正则表达式,则考虑使用s运算符。
y///
! - Daenythtr///
是他们称呼它的方式,但是因为在 sed 中y///
也可以实现同样的功能,所以他们也将y///
引入了 Perl。 - CanSpicetr/uk/gb/
将更改任何us
出现为gs
和任何ak
出现为ab
. - Cheruvim