- ベストアンサー
UTF-8コードの正規表現
PHPの正規表現で、下記文字コードを対象とするパターンはどのように書けば良いのでしょうか。 0xF0 0x9F 0x8C 0x80 - 0xF0 0x9F 0x97 0xBF 例えば 0xF0 0x9F 0x98 0x80 - 0xF0 0x9F 0x99 0x8f であれば、preg_match('/'\xf0\x9f\x98[\x80-\xff]|\xf0\x9f\x99[\x00-\x8f]/') という記述になると思いますが、2バイト目が8c-97のようにまたがる場合のスマートな書き方を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単純に下記のような記述でどうでしょうか? preg_match('/\xF0\x9F[\x8C-\x97][\x80-\xBF]/', $char); 条件をまとめると以下のような感じですね。 1バイト目: 0xF0 2バイト目: 0x9F 3バイト目: 0x8C ~ 0x97 4バイト目: 0x80 ~ 0xBF
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
回答No.2
マルチバイト文字を扱うのであれば(mb_regex_encodingを指定した上で)mb_ereg系の関数を使うべきでは?
- himajin100000
- ベストアンサー率54% (1660/3060)
回答No.1
バイト単位でやる意味がそもそもないんじゃない? http://ideone.com/bjGV3
お礼
まさにこれでした!ありがとうございます。 今気づいたのですが、鬼車のドキュメントにも書いてありました。。 http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt > octal or hexadecimal number sequence can be treated as > a multibyte code char in character class if multibyte encoding is specified. > (ex. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])