• ベストアンサー

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

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

  • 正規表現のマッチングパターン

    WindowsXP、VB6.0にて勉強しております。 http://oshiete1.goo.ne.jp/qa4544122.html 上記質問に関連してなんですが、 パターンをどう記述して良いか分からず困っております。 行いたいのは、数字・A~Z(半角大文字アルファベット)・半角カタカナ以外の文字が文字列に含まれているかどうかなんですが、 "[^0-9]|[^A-Z]|[^。-゜]" というパターンではうまく行きませんでした・・・orz 「()」を使用し、 「"(ab)|(cd)|(ef)" は "ab" または "cd" または "ef" にマッチ」 というのは分かったんですが・・・。 有識者の方、教えていただけませんか? よろしくお願いいたします。

  • 日本語について

    日本語では、幾つの文字を使うのでしょうか? 例えば英語だとA~Zの26文字ですが、 日本語だと、ひらがな、カタカナ、漢字、 時にローマ字も使ったり。 おおよそでいいので、特に漢字の文字数を ご存知の方、教えて下さい。自分で調べようと 検索を試みましたが、ヒットしませんでした。

  • 半角英数字の正規表現でドット(.)がはじかれない

    Javascriptのmatchでファイル名の使用可能文字のチェックを行っています。 使用可能文字は漢字、全角ひらがな、カタカナ、半角英数字、ハイフン(-)、 アンダーバー(_)で以下のように書いています。 if ( filename.match(/[^\u30a0-\u30ff\u3040-\u309f\u30e0-\u9fcf\0-9a-zA-Z\-\_]/) ){ alart(NG) // 使用可能文字以外が含まれている } else{ alart(OK) // 使用可能文字だけ } ファイル名が「ひらがな-カタ_漢字1a」はOK、「ひらが.な-カタ_漢字1a」はNG としたいのですが両方OKになってしまいます。 どうやら半角英数字の「0-9a-zA-Z」を条件に入れることでドット(.)も使用可能文字 とされてしまうみたいです。 「0-9a-zA-Z」を外すと「ひらが.な-カタ_漢字1a」はNG判定になります。 なぜこのようになるのか教えて下さい。

    • ベストアンサー
    • Java
  • 正規表現 英数字を1つ以上含む文字列

    ASP.NET(VB)での入力チェックのために、 半角英数字「0~9」「a~z」「A~Z」と、ハイフン「-」からなる文字列 (ただし、半角英数字「0~9」「a~z」「A~Z」はそれぞれ少なくとも1個ずつ含む) の正規表現での表し方が知りたいです。  How To: ASP.NET への入力を制約するために正規表現を使用する方法  http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000001.aspx  (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$  8から10文字で、最低1文字の数字と1文字の英字を使用し、特殊文字を使用してはいけません。 上記を参考に、 (?!^[0-9]*$)(?!^[a-z]*$)(?!^[A-Z]*$)^([a-zA-Z0-9])$ こんな感じかなぁと試してみたのですが、ダメでした。 そもそも「!」の意味が分かりません。否定でしょうか??

  • 日本語入力のときひらがなを半角にするには

    メール を 送るとき 半角文字 と 指定があっても どうしたら   ひらがな が 半角に変換できるのかが その 操作法方が わからないので おしえてください。

  • 正規表現[a-z0-9\-\.]* の意味を教えて

    [a-z0-9\-\.]* の意味を教えてください。 preg_matchで確かめてみようと思ったのですが、 よく分かりませんでした。 「半角英小文字」か「数字」か「ハイフン」か「ドット」だと思ったのですが、 「半角英大文字」でも、「""」でも「空白」でも「日本語」でも、1が返ってきました。 「*」を調べたら、「直前の表現の0回以上の繰り返しにマッチ」て書いてあったのですが、 「0回以上」の意味が分かりません。 「すべてに当てはまる」ということなのでしょうか?

    • ベストアンサー
    • PHP
  • 正確にスペルを伝える方法

    外国人の方に自分の名前や住所などのスペルを正確に伝えるために、 国名や人名などの頭文字を使って伝える方法があるようですが、 実際のA~Zまでを教えて頂けないでしょうか? もしくはそのようなことが載っているサイトでも結構ですので、 是非教えて下さい。よろしくお願いします。

  • 秀丸の正規表現

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

  • javascriptのmatchで質問です。

    javascriptで入力された文字列の中から、指定した文字の前後の文字がアルファベッド、数字、ひらがな、空白かを判断するものを作成しています。 matchを使って作成を行っているのですが、なかなかうまくいっていないのが現状です。 どなたか知恵をお貸しいただけないでしょうか。 よろしくお願いします。 例 指定文字:1 入力:ABCD1EF 出力:アルファベッドです。 指定文字:う 入力:あいうえお 出力:ひらがなです。 指定文字:あ 入力:あいうえお 出力:前が空白で後ろがひらがなです。 という形にしたいです。

  • IE 日本語入力 できない

    YAHOOなどで検索するときに文字を入力するボックスに日本語入力ができなくなってしまいました。 IMEのツールバーから、「ひらがな」にしても半角でしか入力できません。 アドレス欄の所には、「半角」を押さなくても、ローマ字入力できます。WORDやメモ帳、他では問題ありません。この文面はメモ帳でカット&ペーストしました どうしたらなおるでしょうか?