• ベストアンサー

全角カタカナの正規表現

if (preg_match('/[ァ-ヶー]+/', $value, $match )) { print ("$value"."はカタカナです。"."($match[0])"."<br />") } else { print ("$value"."はカタカナではない。<br />"); } という感じで全角カタカナにマッチさせる正規表現を使いたいのですが、このやり方だと「全角カタカナを含んでいる…」という表現になってしまいます。ある文字列が「すべて全角カタカナである」という正規表現を考えているのですが、なかなかうまくいきません。逆引きのサンプルなんかでもなかなか見つからなくて困っています。  同様に「すべて平仮名にマッチ!」というのにも応用できると思うのですが、なかなかうまく行きません。  是非、そのやり方やヒントをおしえてください。  マルチバイト対応なので[ぁ-ん]のような形で表記できます。またPerl互換(preg_match)で作っているので、Perlに詳しい方も是非是非おしえてください。

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

  • ベストアンサー
回答No.1

行頭と行末を入れてみよう。 http://crocro.com/pc/write/hide/chimarl09_01.html#03

Tinte
質問者

補足

^[ァ-ヶ]+$ 駄目でした…。 ^[ァ-ヶ]$ なんか駄目です。 他のサイトで見つけたのですが、 (mb_eregですが) if (mb_ereg("^[ア-ン]+$", $str)) { echo "すべて全角カタカナである"; } else { echo "すべて全角カタカナではない"; } もうまくマッチしません。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

[ァ-ヶー]+ は文字コードによって片仮名の範囲がことなるので、あやしいですよ

Tinte
質問者

お礼

すべの皆様のヒントで、やっとできました。 (ホントに、ちょっとモノを言ってくれる方々がいると考えるとわかるんですが…一人だとつらい…。。)  いろいろやってみたあげく、 [^ア-ン][^ア-ンーヽヾ]という感じで「カタカナ以外」でマッチさせてみました。  ありがとうございます。

Tinte
質問者

補足

文字コード変換済みでも駄目でしょうか?

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

全角カタカナでない文字を検索するようにしては? 全角カタカナでない文字が見つからなければ文字列は 全て全角カタカナですよね。 あと、空文字列の場合に注意してください。

  • 15mm
  • ベストアンサー率65% (65/100)
回答No.2

単純に考えて 「カタカナではない文字を探したがマッチしなかったら」 といった感じではだめでしょうか? その際、""(文字なし)の状態もマッチしてしまわないように工夫してください。

Tinte
質問者

補足

それだと相当に煩雑なコードになるのではないか…と。 ちょっと今の僕には不可能なような気がします。