- ベストアンサー
全角カタカナの正規表現
if (preg_match('/[ァ-ヶー]+/', $value, $match )) { print ("$value"."はカタカナです。"."($match[0])"."<br />") } else { print ("$value"."はカタカナではない。<br />"); } という感じで全角カタカナにマッチさせる正規表現を使いたいのですが、このやり方だと「全角カタカナを含んでいる…」という表現になってしまいます。ある文字列が「すべて全角カタカナである」という正規表現を考えているのですが、なかなかうまくいきません。逆引きのサンプルなんかでもなかなか見つからなくて困っています。 同様に「すべて平仮名にマッチ!」というのにも応用できると思うのですが、なかなかうまく行きません。 是非、そのやり方やヒントをおしえてください。 マルチバイト対応なので[ぁ-ん]のような形で表記できます。またPerl互換(preg_match)で作っているので、Perlに詳しい方も是非是非おしえてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
行頭と行末を入れてみよう。 http://crocro.com/pc/write/hide/chimarl09_01.html#03
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
[ァ-ヶー]+ は文字コードによって片仮名の範囲がことなるので、あやしいですよ
お礼
すべの皆様のヒントで、やっとできました。 (ホントに、ちょっとモノを言ってくれる方々がいると考えるとわかるんですが…一人だとつらい…。。) いろいろやってみたあげく、 [^ア-ン][^ア-ンーヽヾ]という感じで「カタカナ以外」でマッチさせてみました。 ありがとうございます。
補足
文字コード変換済みでも駄目でしょうか?
- nda23
- ベストアンサー率54% (777/1415)
全角カタカナでない文字を検索するようにしては? 全角カタカナでない文字が見つからなければ文字列は 全て全角カタカナですよね。 あと、空文字列の場合に注意してください。
- 15mm
- ベストアンサー率65% (65/100)
単純に考えて 「カタカナではない文字を探したがマッチしなかったら」 といった感じではだめでしょうか? その際、""(文字なし)の状態もマッチしてしまわないように工夫してください。
補足
それだと相当に煩雑なコードになるのではないか…と。 ちょっと今の僕には不可能なような気がします。
補足
^[ァ-ヶ]+$ 駄目でした…。 ^[ァ-ヶ]$ なんか駄目です。 他のサイトで見つけたのですが、 (mb_eregですが) if (mb_ereg("^[ア-ン]+$", $str)) { echo "すべて全角カタカナである"; } else { echo "すべて全角カタカナではない"; } もうまくマッチしません。