• ベストアンサー

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のようにまたがる場合のスマートな書き方を知りたいです。

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

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

単純に下記のような記述でどうでしょうか? preg_match('/\xF0\x9F[\x8C-\x97][\x80-\xBF]/', $char); 条件をまとめると以下のような感じですね。 1バイト目: 0xF0 2バイト目: 0x9F 3バイト目: 0x8C ~ 0x97 4バイト目: 0x80 ~ 0xBF

okiku2
質問者

お礼

まさにこれでした!ありがとうございます。 今気づいたのですが、鬼車のドキュメントにも書いてありました。。 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])

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

マルチバイト文字を扱うのであれば(mb_regex_encodingを指定した上で)mb_ereg系の関数を使うべきでは?

回答No.1

バイト単位でやる意味がそもそもないんじゃない? http://ideone.com/bjGV3

関連するQ&A