- ベストアンサー
正確に日本語にマッチさせるには??
aからzまでの半角小文字と、あ~ん までの平仮名のいずれか一文字にマッチさせたいのですが、うまくいきません。 /[a-zあ]/ とすると、なぜか「い」や「わ」などの、他の平仮名にもマッチしてしまいます。 どのように書けば正確にマッチさせることが出来るでしょうか??分かる方いらっしゃったらよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#日本語のマッチはなかなか難しいみたいですね。入力された日本語の文字コードが分かっていれば以下のように出来るようです。 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
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Perl 5.8以降をご使用になられているなら、 スクリプトの始めに use encoding 'shiftjis' ; とかそのスクリプトを記述している文字コードをPerl に知らせてやります。 そうすることで、扱っている文字コードがPerl の内部文字コード(フラグ付きUTF-8)に変換されて、全ての文字を統一的に扱うことができるようになり、 /[a-zあ]/ などの表現が正しく処理されるようになります。 つまり、文字コードがわからないと、"あ"などは、単なるバイトのあつまりとなって混乱が生じるということです。(言ってみれば、英語しかわからない人に、英語だよと言ってイタリア語で書かれたテキストを渡しているようなものです) 書いているスクリプトはそれでいいのですが、外部から取り込んだ文字列は、また、内部表現に変えてやる必要があります。 それが、#1の方も書いている Encode::decode です。これで、外部の文字を指定された文字コードから内部コードに変えて(統一的に)扱うことができるようになります。
お礼
回答下さった方ありがとうございました! 参考になりました。