В чем разница между tr /// и s /// при использовании регулярных выражений в Perl? - PullRequest
25 голосов
/ 03 сентября 2010

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

Ответы [ 3 ]

29 голосов
/ 03 сентября 2010

s/// для замены:

$string =~ s/abc/123/;

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

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

$string =~ tr/abc/123/;

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

13 голосов
/ 03 сентября 2010

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

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

7 голосов
/ 03 сентября 2010

С perlop: операторы цитирования и подобные им

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...