• 締切済み
  • 困ってます

文字列の置換について

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

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数28
  • ありがとう数2

みんなの回答

  • 回答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

共感・感謝の気持ちを伝えよう!

  • 回答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に変換して処理した方がいいと思います。

共感・感謝の気持ちを伝えよう!

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • 文字列の置換

    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
  • ファイル内の文字列を置換

    掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。

  • 元の文字列をそのまま使う置換方法を教えてください。

    perlの置換で『aaa』の文字列にマッチする行を置換するにはどうしたらよいでしょうか。 宜しくお願いします。 1.『aaa』にマッチする 1111*aaa2222 2.『aaa』にマッチしない 1111*aaa\2222  1111*aaa_2222   1111,2222には数字や英文字が入ります。 また1.を置換するときに 1111*aaa2222cccc と元の文字列をそのまま使い『ccc』を追加する場合は 置換先はどのように書けばよいでしょうか。 現在正規表現を勉強中で、簡単なことでしたら申し訳ありません。 ヒントでもかまいませんので是非お教え願います。

    • ベストアンサー
    • Perl
  • textファイルにある文字列の置換について

    すみません。 PERL初心者のものですが教えてください。 例えば、a.txtに以下の文字があるとします。 1234567,1111,9,8 1234568,1122,0,5 .... この時、「9」と「0」を文字列 9を"あいうえお" 0を"さしすせそ" と置換したい場合、どのように文字列を置換すれば良いのか ご教授いただけると幸いです。 既に他の方が質問済みでしたら済みません。

    • ベストアンサー
    • Perl
  • 実行時エラー93 パターン文字列が不正です

    ifステートメントでlike演算子を使っていると、 ある文字列で「パターン文字列が不正です」というエラーになります。 意味が分からないのですが、like演算子で使えない文字列があるのでしょうか?

  • 文字列の置換

    文字列を下記のように置換したいのですが ABC123 → AB123D (上記で固定でなく123の数字は変わっていきます) SUBSTITUTEでABCをABには置換できるのですが 数字の後にCをDの位置に移動させる なにか計算式や関数などありますか? これができるならば さらにネストすることはできますか? (上記のような変化をするイレギュラーの置換は式の中で1つだけです) =SUBSTITUTE(SUBSTITUTE・・・・ よろしくおねがいします。 エクセル2000でもできるやり方を希望します。

  • jqueryで文字列を置換したいのですが。

    jqueryで文字列を置換したいのですが。 例えば<a href="http://*****/database.cgi?keys10=検索文字01"> みたいなアンカーがあったとして、これの”検索文字”の部分のみを置換して 例えば<a href="http://*****/database.cgi?keys10=検索文字02"> の様に置換することは可能でしょうか。 何卒、宜しくお願いいたします<m(_ _)m>

  • 文字列の置換

    変数に含まれる isbn:・・・・ asin:・・・・ という文字列を <a href="http://<略>/・・・・/">isbn:(asin:)・・・・</a> と置換したいのですがどのように処理すればいいかわかりません。 isbn,asinは半角で大小文字の区別は無し :の後はアルファベット・数字・_です。

  • ディレクトリ内の複数ファイルの中から特定の文字列を置換したい

    ディレクトリ内の複数ファイルの中から特定の文字列を置換したい 要は、あるフォルダ内のテキストファイルに含まれる 123を987にしたいということなんですが。 sedは使えなかったんで、 perl -p -i -e 's/123/987/' *.txt としたらできました。 しかし、 perl -p -i -e 's/$rh, $rh1/$rh2, $rh2/' *.cgi のようにスペースを含むとどうもうまくいきません。 教えてください。お願いします。

  • VBScriptで文字列置換

    VBScriptで文字列置換をさせたいので コーディングをご教授ください。 ----------------------------------------------- 置換前 あいうえお@,@aaaaaaaa@,@5648941248@ かきくけこさし@,@bbb@,@15249511456664654654@ 置換後 あいうえお@,@aaaaaaaa@,@111@ かきくけこさし@,@bbb@,@111@ ----------------------------------------------- 最後の@で囲まれた部分の数字を全て111にしたいのです。