重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

ファイル名で使用不可な文字を削除しようと思い以下のようにしました。

----------
$str =~ tr/\/\\:*?"<>|//;
----------
(置換後の設定部は記載無しで削除したい)

しかし、何も変換はされません。
置換後を半角スペース一文字にすると半角スペースに置換されますが、文字削除をするべく何も書かないと、何も変換されません。
このような処理はできないのでしょうか?

perlのバージョンは以下です。
----------
perl -v

This is perl, v5.8.6 built for i686-linux
----------

A 回答 (3件)

tr/検索リスト/置換リスト/


で置換リストを省略すると検索リストがそのまま使われます。(つまり、自分自身に置き換えることになります、なので変換されていないように見えます。マッチした文字数を数えるためにこうした使い方をする場合があります)
dオプションを使用すると検索リストにあって、置換リストに無い物が削除されますので、

$str =~ tr/\/\\:*?"<>|//d;

とすれば良いと思います。*も?もエスケープした方がいいかも・
    • good
    • 0
この回答へのお礼

出来ました!
削除するには書かないのではなくdオプションが必要なのですね・・・。

エスケープの件は、多分、trは正規表現は使われないので、*や?は不要なのかもしれません。

どうもありがとうございました。

お礼日時:2005/04/03 23:28

私が回答を書いてるうちに、


BLUEPIXYさんが、もっと良い説明を書いてくれてました。
そちらを参考にして下さい。>helonpaさん
    • good
    • 0
この回答へのお礼

何も書かなければ削除されると思い込んでいました。
どうもありがとうございました!

お礼日時:2005/04/03 23:29

trにd(delete)オプションを付けたらどうでしょう?



D:\>perl -e "$str='abcd';$str=~tr/bc//;print $str;"
abcd
D:\>perl -e "$str='abcd';$str=~tr/bc//d;print $str;"
ad
D:\>
D:\>perl -v

This is perl, v5.8.4 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)

Copyright 1987-2004, Larry Wall

Binary build 810 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Jun 1 2004 11:52:21

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.


D:\>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!