• ベストアンサー

文字列検索(例えばindex関数)をバイト単位で行いたい

やりたいことは日本語文字列の処理で、特定の文字を切り抜きたいのですがうまくいきません。 なぜなら、文字列を切り抜くsubstr関数がバイト単位であるのに対し、文字列を検索するindexがバイト単位でおこなわれていないからです。 例: 文字列"12万3456円"から、円だけを取り除きたいとします。 $str = "12万3456円"; $index = index($str,"円"); $newStr = substr($str, 0, $index); indexは7を返すが、substrで0から7番目を切り取っても、バイト単位なのでうまくいきません。 文字列の検索をバイト単位で行う方法を教えてください。 おねがいします。

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

  • ベストアンサー
  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.2

そもそも何でバージョンをかかない? Perl5.8.8だと $str = "12万3456円"; $index = index($str,"円"); $newStr = substr($str, 0, $index); print $newStr; だけでもSJISでも期待の動きをする. #まあ,危ない文字だと動かないだろうから #各種プラグマの類は書くべきだけど けど・・そもそも正規表現にしない事情がまるでわからない 最近のPerlだとベースがUTF8だから 日本語がどーのこーのとか二バイトがどーのこーのは 基本的にはない.

tenketu
質問者

お礼

すいません。あせって完全に忘れてました。 環境はubuntu8,Perl5.8.8です。 (mysqlはxampp) 実は、いろいろありまして、 あらかじめ$str = "12万3456円";というふうに宣言すればうまくいくのですが、mySQLから文字列のデータをとってきて実行した場合うまくいかない、という状況でして、それで普通にやるのをあきらめてindexとか使ってやろうとしてました。 それでここにこういった質問をしたのですが、 >最近のPerlだとベースがUTF8だから >日本語がどーのこーのとか二バイトがどーのこーのは >基本的にはない とのご指摘をいただいて、もうすこしねばってみるかと思い、今少し奮闘してたのですが、自己解決いたしました。 この質問の回答とは別物ということにはなりますが、 mySQLからとってきた文字列でうまくできない原因は、はっきりとはわかりませんが、その文字列を操作する前に 「 no utf8; 」 をいれるとうまくいきました。 ググってこの原因を詳しく調べたいと思います。 いずれにせよ、手がかりを与えてくださったことに深く感謝いたします。

その他の回答 (1)

回答No.1

perl 5.8.6以上なら #!/usr/bin/perl use encoding 'shiftjis'; use Encode qw/encode decode/; $str = "12万3456円"; $str =~ s/円//g; print "$str\n"; これで円を取れますけど、こういう意味ではないのでしょうか?

tenketu
質問者

お礼

回答ありがとうございます。 #2へのお礼文にもある通り、この質問は私の早まりすぎた質問でした。

関連するQ&A

専門家に質問してみよう