• ベストアンサー

正確に日本語にマッチさせるには??

aからzまでの半角小文字と、あ~ん までの平仮名のいずれか一文字にマッチさせたいのですが、うまくいきません。 /[a-zあ]/ とすると、なぜか「い」や「わ」などの、他の平仮名にもマッチしてしまいます。 どのように書けば正確にマッチさせることが出来るでしょうか??分かる方いらっしゃったらよろしくお願いします。

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

  • ベストアンサー
  • SE-1
  • ベストアンサー率57% (26/45)
回答No.1

#日本語のマッチはなかなか難しいみたいですね。入力された日本語の文字コードが分かっていれば以下のように出来るようです。 use strict; use Encode qw/encode decode/; my $nihongo = "ひらがな 漢字 カタカナ 混じりモノ Alphabet"; $nihongo = decode ('sjis',$nihongo); foreach ($nihongo=~/(\p{Hiragana}+|\p{Ll}+)/g){ my $nihongo2=encode('sjis',$_); print "$nihongo2\n" } #↑ http://module.jp/blog/regex_unicode_prop.html

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=202554

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Perl 5.8以降をご使用になられているなら、 スクリプトの始めに use encoding 'shiftjis' ; とかそのスクリプトを記述している文字コードをPerl に知らせてやります。 そうすることで、扱っている文字コードがPerl の内部文字コード(フラグ付きUTF-8)に変換されて、全ての文字を統一的に扱うことができるようになり、 /[a-zあ]/ などの表現が正しく処理されるようになります。 つまり、文字コードがわからないと、"あ"などは、単なるバイトのあつまりとなって混乱が生じるということです。(言ってみれば、英語しかわからない人に、英語だよと言ってイタリア語で書かれたテキストを渡しているようなものです) 書いているスクリプトはそれでいいのですが、外部から取り込んだ文字列は、また、内部表現に変えてやる必要があります。 それが、#1の方も書いている Encode::decode です。これで、外部の文字を指定された文字コードから内部コードに変えて(統一的に)扱うことができるようになります。

fortunefeeling
質問者

お礼

回答下さった方ありがとうございました! 参考になりました。

関連するQ&A