WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlで半角カタカナを検索したい

0:[投稿] アサタカ [2005/09/30 14:20 ][環境:IE6 WINXP perl CGI]

初めて質問します。よろしくお願いします。

データベース(mysql)からとってきた値(半角カタカナ)をあいうえお別に振り分けたいのですが

if($sth =~ /^ア/) {
         push @data, $h;
}

とやってみたところ@dataにはなにも入りませんでした。

そこで擬似的に"山川"という値をいれ"ア"を"山"としたところ正常に動作しました。

また正規表現を使わず
$top = substr($h->{stone}, 0, 1);
if($top eq "ア") {
     push @data, $h;
}

という方法でやってみたところ$topにはきちんと最初の頭文字が入っていたのですが@dataには値が入りませんでした。

半角カタカナでなく漢字や英数字ではうまくいくので半角カタカナであるというこに問題があると思ったのですがどうすればよいのでしょうか?


1:[関連] アサタカ [2005/09/30 14:25 ]

説明忘れてました。

データベースはsjisでプログラムはeucなのでjcode.plを使用してeucに統一しております。


2:[回答] miz [2005/09/30 20:58 ]

「正しくパターンマッチさせる」の項参照
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
略記すると
1.\Qと\Eで括る
if($sth =~ /^\Qア\E/)

2.index関数を使う方が速いかも、という記述も上記urlにありますね
$keyword = 'ア';
if (index($sth, $keyword) == 0)    ### 先頭は0


3:[回答] AC1号 [2005/10/01 15:10 ]

jcode.plを使用している、とありますが、自動判別で文字コードの変換を行っていませんか?
いわゆる半角カナを含んでいる場合、文字コードの判別は困難です。そうでない場合でも失敗する場合もありえます。この例のように変換する文字の文字コードが明らかな場合は、明示的に変換元の文字コードを指定します。
jcode::convert(\$line, 'euc', 'sjis');

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World