• 締切済み

文字列の置換について

Perl(CGI)のプログラムを作成しているのですが '金額=(税抜2000円) 2100円'という文字列を'[単価]2100円'に置換したいのですがうまくいきません。数字の箇所常には変わります。置換演算子で試してみましたが私の知識ではダメでした。周りに聞ける者がおりませんのでご教示お願いいたします。

みんなの回答

回答No.4

拝見したところ必要な情報は、税込みの2100円ということですので スマートな方法としてPerlのパターンマッチ演算子(m//)を使い、ここで必要な値(2100円)を取得する事ができます。 あとは取得した値の前に"[単価]"文字列を追加します。 以下の内容でいかがでしょうか。ご参考になればと思います。 #!/usr/bin/perl use strict; use warnings; use utf8; my $text = '金額=(税抜2000円)2100円'; my ($zeikomi) = $text =~ m/(\d+円)$/; print '[単価]'. $zeikomi;

参考URL:
http://www.rfs.jp/sb/perl/02/09.html
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

 Shift_JISで問題となる文字は、少なくともこの例にはないようですが、基本は、データを一旦、EUCないしUTFに変換して処理すべきです。  ここで大事なことは、正規表現で、その文書の中に登場する被置換候補は、'金額=\(税抜2000円\) 2100円'という文字列だけで、 '金額=(税抜3000円) 3150円'などは無いということでしたら、 $original = '金額=\(税抜2000円\)'; $new = '[単価]2100円'; ・・・ まあ、金額が色々あり、複数個所あるなら、下のように! Sample__________________ #!/usr/local/bin/perl use strict; my $original='金額=\(税抜.*?円\) '; my $new = '[単価]'; open(IN,"test.txt"),or die; open(OUT,">new.txt"),or die; while(<IN>){ s/$original/$new/g; print OUT $_; } __END__ 金額=(税抜.*?円) --最小マッチでこの文字列を[単価]に変更 ^^^^^^^^^^^^^^^^^ 随所にあるので gが必要

回答No.2

my $s = '金額=(税抜2000円) 2100円'; $s =~ s/金額=\(税抜\d+円\)\s+(\d+)円/[単価]$1円/; print $s; メタキャラである '(' ')' をエスケープしていないのが原因です。 この場合に限れば、文字コードは関係ありません。 ただ、別の問題が出たりしないよう、UTF8に変換して処理した方がいいと思います。

  • MOMON12345
  • ベストアンサー率32% (1125/3490)
回答No.1

a$ = '金額=(税抜2000円)2100円' ; a$ =~ s/金額=(税抜\d+円)/\[単価\]/ ; これでダメですかね。 文字コードはEUCを使って。

satosato20
質問者

補足

回答ありがとうございます。 変換されないのですが文字コードSHIFT-JISが問題でしょうか? 該当の変数だけEUCに変換してみます

関連するQ&A