Подтвердить что ты не робот

Какая разница между tr///и s///при использовании регулярного выражения в Perl?

Мне было интересно, когда следует использовать s/// над tr/// при работе с регулярными выражениями в Perl?

4b9b3361

Ответ 1

s/// для подстановки:

$string =~ s/abc/123/;

Это заменит первый "abc", найденный в $string, на "123".

tr/// для транслитерации:

$string =~ tr/abc/123/;

Это заменит все вхождения "a" внутри $string на "1", все вхождения "b" с "2" и все вхождения "c" в "3".

Ответ 2

tr/// не является оператором регулярного выражения. Он подходит (и быстрее, чем s///) для подстановок одного символа с другим одиночным символом или (с модификатором d), заменяя один символ нулевыми символами.

s/// следует использовать для чего-то более сложного, чем узкие варианты использования tr.

Ответ 3

От perlop: Операторы с котировками и цитатами

Обратите внимание, что tr не выполняет регулярные классы символов выражения, такие как \ d или [: lower:]. Оператор tr является не эквивалентно утилите tr (1). Если вы хотите сопоставить строки между нижние/верхние регистры, см. lc и uc, и в общем случае рассмотрим использование s оператора, если вам нужно выражения.