Perl初心者必見!文字列置換の方法を解説!

このQ&Aのポイント
  • Perl初心者のための文字列置換の方法をご紹介します。
  • 以下の方法を使用して、複数の置換をまとめて行うことができます。
  • 具体的な置換方法として、$paramにセットされた1~9の値を置換しています。
回答を見る
  • ベストアンサー

文字列置換

すみません、perl初心者なのですが・・。 以下のような置換を行いたいのですが、 これをひとまとめに記述する方法を教えてください。  ※$paramに1~9の値いずれがセットされている場合。   $param =~ s/1/hokkaido/g; $param =~ s/2/tohoku/g; $param =~ s/3/kantou/g; $param =~ s/4/hokuriku/g; $param =~ s/5/cyubu/g; $param =~ s/6/kinki/g; $param =~ s/7/chugoku/g; $param =~ s/8/shikoku/g; $param =~ s/9/kyusyu_okinawa/g;  宜しくお願い致します。

  • rariko
  • お礼率28% (223/790)
  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 検索対象となる文字列は数字1文字固定ですか?  であれば、 @Num2Place = ( '', 'hokkaido', 'tohoku', 'kantou', ...); #以下略 $param = $Num2Place[$param];  と、このようにします。  数字1文字なのは単に例だからにすぎないのであれば、 @Num2Place = ( '', 'hokkaido', 'tohoku', 'kantou', ...); #以下略 $param =~ s/\d/$Num2Place[$&]/g;  これ↑で置き換えできます。  俺はこの方法で全角の大文字/小文字変換とかやってます。

rariko
質問者

お礼

回答ありがとうございます。 検索対象文字列は数字1文字固定でした。 これから少しずつ勉強していきたいと思います。

関連するQ&A

  • 文字列置換

    UNIXのコマンドで文字列の置換を試みています。 今回行いたい置換としては。。。 12年 1986年2月12日 14 などの文字列を NUM年 NUM年NUM月NUM日 NUM などに、連続した数字をひとまとめにNUMに置換したいと考えています。 文字列の置換方法としてsedコマンドがあると聞いてしらべてみたのですが、いまいいち理解することができませんでした。 自分で考えて試してみたコマンドが以下の通りです。 sed -e "s/\([1-9]\{1,2,3,4\}\)/NUM/g" filename が・・・まったく置換はされませんでした。 よろしければお教えください。よろしくお願いいたします。

  • 文字列の置換

    JAVAであるファイル内の文字列を置換するプログラム(日本語)を作りたいのですが、 ・ ・ String h_s; FileReader h_fr = new FileReader(in_filename); BufferedReader h_br = new BufferedReader(h_fr); while(true){  h_s = h_br.readLine();  if (h_s == null){   break;  }  ●文字列を置換するプログラム● } ・ ・ ここの●文字列を置換するプログラム●にあたる適当な関数って何かありますか? たとえばperlでいうと↓みたいなものなのですが・・・ s/置換前文字/置換後文字/g よろしくお願いします。

    • ベストアンサー
    • Java
  • 置換文字列の中に"?"があると置換できません。

    恐れ入ります。 ?”クエスチョンマーク”の置換をしたいのですが できなくて困っています。 例 #!/usr/bin/perl $a='a?a'; $b='bbba?abbbbaaaabbbbabbbbb'; $b=~ s/$a//g; print "$b\n"; 文字列$bから”a?a”を削除しようとしているのですが、 変化しません。 ためしに\?としてみましたが・・・だめでした。 ?を!に変えたい!とかいう人は絶対いると思い 「クエスチョンマーク 置換」 等で検索したのですが、 「0個(=1個もない)、または1個ある場合」を表している」 等の情報ばかりでした・・・ どうか教えてください。。。

    • ベストアンサー
    • 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
  • Perlでの文字列置換

    大学での研究でperlを使用しているのですが、次のような問題が起こって少し困っています。 Perlで以下のようなscriptを書いたのですが、うまく置換してくれないのです。 *************************************************************************** printf(STDERR "start replacement\n"); $L1_before="+ L1_01\n"; $L1_after=3.14; $string=~ s/(=$L1_before)/=$L1_after/g; printf(STDERR "L1_before=%s",$L1_before); printf(STDERR "L1_after=%.2f\n",$L1_after); printf(STDERR "string=%s\n",$string); printf(STDERR "end replacement\n"); **************************************************************************** 実行結果は、以下の通りです。 **************************************************************************** start replacement L1_before=+ L1_01 L1_after=3.14 string= end replacement **************************************************************************** これは簡易版なのですが、やっていることはそのままです。 何が問題になっているのでしょう。わかる方は教えていただけると助かります。 ちなみに、私はPerlを勉強し始めたばかりです。

    • ベストアンサー
    • Perl
  • 電力会社名のtheの有無の違い

    こんにちは。 電力会社のサイトを見ていましたら、 Tokyo Electric Power Company, Inc. (TEPCO) Chubu Electric Power Co., Inc. Hokkaido Electric Power Co., Inc. Hokuriku Electric Power Company The Kansai Electric Power co., Inc. The Chugoku Electric Power Co.,Inc. The Okinawa Electric Power Company ・・・ というように、theが付かない社名と、付く社名とがありました。 これは意味合いに違いがあるのでしょうか。たとえば、「theはここに掛かっている」とか。 それとも日本人的に適当なのでしょうか? 冠詞ありなしの違いを教えてください。宜しくお願いします。

  • フォルダ内のファイルを全て開き文字列置換

    こんばんは。Perl超初心者です(プログラミングの初心者でもあります)。 フォルダ内にあるすべてのファイルに対して、正規表現を使った文字列置換をしたいのですが、うまくいきません。アドヴァイスをいただけないでしょうか。 具体的には、あるファルダの中に100個程のファイルがあって、その中の改行が3回連続している部分を、「改行+[SAMPLE]+改行」に置換をしたいと表います。 Windows XP Professional SP3 / ActivePerl 5.10 の環境で、以下のように記述したのですが、「Missing $ on loop variable at insert.pl line 5.」とエラーになってしまいます。どこで、間違ったのでしょうか(というか、まるでダメなスクリプトかもしれませんが…)。 use strict; use warnings; my @filename = glob "*.txt"; foreach open(FILE, "$filename(@filename)") { my @content =<FILE>; @content =~ s/\n{3}/\n[SAMPLE]\n/g; print FILE @content; close(FILE); } どなたか、ご教示いただけると非常助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • perlでの改行コードの置換

    perlで改行コードを置換したいのですが・・・ もとのファイルはS-JISコードでその中身をEUC(UNIXで使用するために)に変換します。ここまではOKなのですが、改行コードがうまく行きません。 改行コードをUNIXで使うためにLFだけにしようと思い、 $line =~ s/\r\n/\n/g; (これは\r\nで引っかからない) とか $line =~ s/\n/\x0A/g; とかにしてみたのですがうまく行きません。 どのようにすればよろしいでしょうか?

    • ベストアンサー
    • Perl
  • sedでの改行置換

    sedを用いた処理で質問があります。 出力結果の改行を置換して一列として表示しようとしているのですが、どうもうまくいきません。 (perlは敢えて使いません) 例えば、以下のようなファイルがあるとして、 $ cat hoge.txt hoge boo bar この出力結果を加工して、「hoge boo bar」のように、 改行をスペースに置換して一行として表示したい場合は、どのようにすれば良いでしょうか? ちなみに、以下のような使い方だと、うまくいきませんでした。 $ cat hoge.txt | sed 's/\ > / /g' $ cat hoge.txt | sed 's/\n/ /' ■実行環境 OS : RedHat EL 1 sedのバージョン : sed-4.0.7-3 宜しくお願い致します。

  • 置換演算子についての疑問

    お世話になっております。horagaiです。質問160286 http://oshiete1.goo.ne.jp/kotaeru.php3?q=160286 と同じようなことをやりたかったので回答#2のやり方を 試してみました。そこでいろいろ疑問が出てきたので教えていただきたいと思います。 (1) $num=<> ; while($num =~ s/(.*\d)(\d\d\d)/$1,$2/g){;} print "num=$num\n"; とするとたしかにうまくいくのですが、これでうまくいく理由がわかりません。 置換演算子が後ろからパターンマッチをしていくのだとすればわかるのですが。 前からだとするとたとえば123456は最初に(1)(234)56で引っかかって1,23456 。 次に (1,2)(345)6 で引っかかって1,2,3456 ・・・。 などとなりそうな気がします。 (2) またwhileを使わずに $num =~ s/(.*\d)(\d\d\d)/$1,$2/g; としてみると 例えば入力が 12345678 とすると num=12345,678 と最初の3桁しか区切ってくれません。マニュアルを見ると 「gオプションは出現したパターンをすべて置換する。」 と書いてあるのにどうしてでしょう。 前からマッチするせよ後ろからマッチするにせよカンマが1つしか 入らないということはないと思うのですが。 以上、私が根本的な勘違いをしているかも知れませんので その辺のところもご指摘いただければ幸いです。 ちなみにOSはLinux.Perlのバージョンは5.004です。

    • ベストアンサー
    • Perl

専門家に質問してみよう