• ベストアンサー

trで文字削除

ファイル名で使用不可な文字を削除しようと思い以下のようにしました。 ---------- $str =~ tr/\/\\:*?"<>|//; ---------- (置換後の設定部は記載無しで削除したい) しかし、何も変換はされません。 置換後を半角スペース一文字にすると半角スペースに置換されますが、文字削除をするべく何も書かないと、何も変換されません。 このような処理はできないのでしょうか? perlのバージョンは以下です。 ---------- perl -v This is perl, v5.8.6 built for i686-linux ----------

  • Perl
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

tr/検索リスト/置換リスト/ で置換リストを省略すると検索リストがそのまま使われます。(つまり、自分自身に置き換えることになります、なので変換されていないように見えます。マッチした文字数を数えるためにこうした使い方をする場合があります) dオプションを使用すると検索リストにあって、置換リストに無い物が削除されますので、 $str =~ tr/\/\\:*?"<>|//d; とすれば良いと思います。*も?もエスケープした方がいいかも・

helonpa
質問者

お礼

出来ました! 削除するには書かないのではなくdオプションが必要なのですね・・・。 エスケープの件は、多分、trは正規表現は使われないので、*や?は不要なのかもしれません。 どうもありがとうございました。

その他の回答 (2)

  • PSV
  • ベストアンサー率60% (3/5)
回答No.3

私が回答を書いてるうちに、 BLUEPIXYさんが、もっと良い説明を書いてくれてました。 そちらを参考にして下さい。>helonpaさん

helonpa
質問者

お礼

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

  • PSV
  • ベストアンサー率60% (3/5)
回答No.2

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:\>

関連するQ&A

  • tr演算子で「/」を扱いたい

    Perlの質問というべきかどうか・・・ でもPerlを使っている時に出てきた問題なので・・・ 例えば   $str="a-b-c" という文字列があったとして、これを"a b c"に変換したい場合は   $str=~tr/-/ /; とすれば良いわけですが、では"a/b/c"に変換したい場合はどうすれば良いのでしょう?   $str=~tr/-///; としても   $str=~tr/-/'/'/; としてもエラーになります。 お手数ですがよろしくお願いします。

    • ベストアンサー
    • Perl
  • ”ァー”が含まれている文字を置換すると文字化け

    OS:solaris8 perlのver:5.8.6 perlで、”ァー”が含まれている文字列に対し、 全角スペースを半角スペースに置換しようとすると 文字化けしてしまいます。 (”ぁー”でもどうようでした) ”ぃー”や”ぅー”、”ぁ”では 問題無いのですが…。 当方、perl初心者&文字コードに詳しくないため、 原因がよくわからないでいます。 どなたか原因をおわかりの方、 ご教授お願いいたします。 文字コードはEUCです。 以下はソースです my $line = "ファイヴァー スコープ 眼鏡"; $line =~ s/\t/ /g; # タブを半角スペースに置換する print '$line2='.$line."<br>\n"; $line =~ s/ / /g; # 全角スペースを半角スペースに置換する print '$line3='.$line."<br>\n"; #↑ここで文字化けしてしまいます $line =~ s/^\s+//; # 頭の空白を除く print '$line4='.$line."<br>\n"; $line =~ s/\s+$//; # 尻の空白を除く print '$line5='.$line."<br>\n";

    • ベストアンサー
    • Perl
  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • 半角スペース削除について

    半角スペースを一度削除してから禁止語句などがないかチェックし、 その後、半角スペースなどが入っている場合、元状態に戻したいと思います。 以下のように記述することで半角スペースを削除してから チェックはできると思うのですが、 それを元の状態に戻すということは不可能でしょうか? $str =~ s/[\s ]+//g if($str =~ /バカ/){ push(@error, 'バカと投稿はできません'); }

  • 半角全角スペースの削除(先頭&末尾)

    やまとです。 ある文字列の先頭と末尾のスペースを取り除きたいのですが、 どのようにしたら良いでしょうか? 事前に試した事が2つあります。 1.trim を使用する。  $aiueo = " あいうえ お "; $aiueo = trim($aiueo));  とすると、スペースが削除されます。  しかし、これでは全角のスペースが削除されないようですね。 2.置換する。  $aiueo = " あいうえ お ";  $aiueo = str_replace( ' ', '', $aiueo );  とすると、全角のスペースが削除されます。  しかし、文字列の先頭と、末尾以外の全角スペースも削除されてしまう  ようですね。 では、文字列の先頭と末尾の半角スペースと全角スペースを削除したい場合は どのようにしたら良いでしょうか? ご教授願います。

    • ベストアンサー
    • PHP
  • perlで英数字を取り出すには?

    Perlで英数字下記の条件で取り出したいのですがどのようにすればよいでしょうか? ご返答いただけるととても助かります。 宜しくお願い致します。 条件 英数字と半角文字とスペースのみを取り出したい。(それ以外の文字は半角スペースに置き換えたい。) また、連続するスペースは削除したい。 ------------------ $str ='※第25回Ski Festival開催'; $str =~ ???????[0-9A-Za-z ] print $str; ------------------ 期待する結果 25 Ski Festival

    • ベストアンサー
    • CGI
  • エクセルで改行を含めた文字を削除したいです。

    エクセルで、画像にあるように改行を含めた赤枠部分を置換で削除したいのですが、 Ctrl+Jなどで改行を足しても上手く検索されません。 良い方法はありませんでしょうか。 実際に置換で削除したい内容は以下になります。 <tr> </tr> ↑こちらです・・・。

  • エクセルで改行を含めた文字を削除したいです。

    エクセルで、画像にあるように改行を含めた赤枠部分を置換で削除したいのですが、 Ctrl+Jなどで改行を足しても上手く検索されません。 良い方法はありませんでしょうか。 実際に置換で削除したい内容は以下になります。 <tr> </tr> ↑こちらです・・・。

  • perl tr での変数の使い方

    tr を使って文字列を置換する時に 検索文字列や置換後の文字列のリストとして変数を使いたいのですがうまくできません。 tr はコンパイル時に変数を展開するので eval を使わないといけないという記述を見つけたのですが そこから先のやり方がわかりません。 eval "tr/$ab/$cd/"; のように書くというような記述までは見つかるのですけれど これを使ってどうすれば変換ができるのかわからないのです。 どなたか教えてください。 (初心者でごめんなさい。eval とか全然使い方がわかりません…)

    • ベストアンサー
    • Perl
  • PHPの空白除去

    PHP5において 半角の前後空白を削除する関数trimは理解してます。 文字列中にある半角及び全角の空白を除去するには 文字列置換用の関数、例えばstr_replaceを使って置換すれば 全て空白を除去出来ます。 例: ---------------------------------- $string=" あ い う え お "; $all=" ";//全角スペース $half=" ";//半角スペース $no="";//削除用変数 $string=str_replace($all,$no,$string); $string=str_replace($half,$no,$string); ---------------------------------- 最後の2行を書けば置換が出来るのですが、問題はこの二つの関数をまとめてクラス化し、再利用したいと思っています。 クラスの作成方法及び使用方法がまだまだ理解していないので、困ってます。どなたかお力になって頂ければ幸いにございます。

    • ベストアンサー
    • PHP

専門家に質問してみよう