漢字などにマッチさせるには、対象とする文字コードや使用する処理系によって、異なるアプローチをとる必要があります。
Unicodeプロパティのスクリプトがサポートされているならば、それを使用します。
文字種 | メタ文字 |
---|---|
ひらがな | \p{Hiragana} |
カタカナ | \p{Katakana} |
漢字 | \p{Han} |
\p{L}
など\p{Ll}
など\p{Han}
など\p{Tibetan}
など一般プロパティは、一部の実装では波かっこ ({}) なしで参照できます。たとえば\p{L}
は\pL
となります。
文字クラスで、文字が定義されているコードの範囲を指定します。このときShift_JISなどの[亜-熙]
では不十分で、Unicodeブロックの範囲を指定する必要があります。
[\u3041-\u3096]
[\x{3041}-\x{3096}]
[\u30A1-\u30FA]
[\x{30A1}-\x{30FA}]
[々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]
[々〇〻\x{3400}-\x{9FFF}\x{F900}-\x{FAFF}]|[\x{D840}-\x{D87F}][\x{DC00}-\x{DFFF}]
それぞれの文字の範囲は、以下のUnicodeブロックを表します。
\u3400-\u9FFF
\uF900-\uFAFF
[\uD840-\uD87F][\uDC00-\uDFFF]
JIS規格により文字集合が並んでいることを利用し、文字クラスの範囲指定を利用します。文字コード表 シフトJIS(Shift_JIS)
文字種 | 文字クラス |
---|---|
ひらがな | [ぁ-ん] |
カタカナ | [ァ-ヶ] |
漢字 | [亜-熙] ※1 |
上記すべて | [ぁ-んァ-ヶ亜-熙] |
※1 第1水準と第2水準の漢字のみ。これ以外は実装依存で、たとえば文字コードがCP932ならば、纊-黑
を追加する。
先頭と末尾の文字を文字コードで指定し、文字クラスの範囲指定を利用します。
文字種 | 正規表現 |
---|---|
ひらがな | \x82[\x9f-\xf1] |
カタカナ | \x83[\x40-\x96] |
漢字 | [\x88-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc] ※1 |
上記すべて | [\x82-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc] |
これはそれぞれ文字コードの最初と最後の文字を指定していて、文字と文字コードは
のような対応となっています。全角文字については、文字コード表の全角文字が定義されている範囲をすべて含むように指定しています。文字コード表 シフトJIS(Shift_JIS)
[\x00-\x7F]
で、すべてのASCII文字にマッチします。これの否定の[^\x00-\x7F]
とすることでASCII文字以外、つまり全角文字にマッチさせることができます。
漢数字は文字コードの順に並んでいないため、半角の数字のように範囲指定で[〇-九]
のようにはできません。よってマッチさせるすべての文字を、[〇一二三四五六七八九]
のように並べることで対処します。