- 締切済み
文字列の置換について
Perl(CGI)のプログラムを作成しているのですが '金額=(税抜2000円) 2100円'という文字列を'[単価]2100円'に置換したいのですがうまくいきません。数字の箇所常には変わります。置換演算子で試してみましたが私の知識ではダメでした。周りに聞ける者がおりませんのでご教示お願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- ice_cube22
- ベストアンサー率0% (0/0)
拝見したところ必要な情報は、税込みの2100円ということですので スマートな方法としてPerlのパターンマッチ演算子(m//)を使い、ここで必要な値(2100円)を取得する事ができます。 あとは取得した値の前に"[単価]"文字列を追加します。 以下の内容でいかがでしょうか。ご参考になればと思います。 #!/usr/bin/perl use strict; use warnings; use utf8; my $text = '金額=(税抜2000円)2100円'; my ($zeikomi) = $text =~ m/(\d+円)$/; print '[単価]'. $zeikomi;
- ORUKA1951
- ベストアンサー率45% (5062/11036)
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が必要
- euthanasia
- ベストアンサー率63% (7/11)
my $s = '金額=(税抜2000円) 2100円'; $s =~ s/金額=\(税抜\d+円\)\s+(\d+)円/[単価]$1円/; print $s; メタキャラである '(' ')' をエスケープしていないのが原因です。 この場合に限れば、文字コードは関係ありません。 ただ、別の問題が出たりしないよう、UTF8に変換して処理した方がいいと思います。
- MOMON12345
- ベストアンサー率32% (1125/3490)
a$ = '金額=(税抜2000円)2100円' ; a$ =~ s/金額=(税抜\d+円)/\[単価\]/ ; これでダメですかね。 文字コードはEUCを使って。
補足
回答ありがとうございます。 変換されないのですが文字コードSHIFT-JISが問題でしょうか? 該当の変数だけEUCに変換してみます