Appendix C — コラム: 文字クラス・POSIX文字クラス

対象の文字が決まった文字列で生成されている場合には、文字クラスあるいはPOSIX文字クラスを利用すると良い。文字クラスとは、ブラケット ([])で挟んだ範囲の文字をパターンとみなし、更に連続する文字列の場合、例えばAからZまでのアルファベッドを指定する際にABC..Zとするのではなく、A-Zと対象の文字列の範囲を-で文字をつなぐことで複数の文字をパターンに含めることができる。

文字クラス 対象
[0-9] アラビア数字
[a-z] 小文字アルファベット
[A-Z] 大文字アルファベット
[ぁ-ん] ひらがな
[ァ-ヶ] カタカナ
[一-龠] 漢字
[\x01-\x7E] 1バイト文字
(string <- c("ひらがな", "カタカナ", "漢字", "ABC", "abc", "123"))
[1] "ひらがな" "カタカナ" "漢字"     "ABC"      "abc"      "123"     
# A, B, C に含まれるパターン
grep("[A-C]", string, value = TRUE)
[1] "ABC"
# ひらがなが該当するパターン
grep("[ぁ-ん]", string, value = TRUE)
[1] "ひらがな"
# アンカーを利用して、ABC 以外のパターンとマッチさせる
grep("[^ABC]", string, value = TRUE)
[1] "ひらがな" "カタカナ" "漢字"     "abc"      "123"     
# 複数の文字クラスを扱うこともできる
grep("[ぁ-んァ-ヶ一-龠]", string, value = TRUE)
[1] "ひらがな" "カタカナ" "漢字"    
grep("[0-9]{2,4}", x = c(10, 3), value = TRUE)
[1] "10"

POSIX文字クラスは一致するパターンを特定の種類にまとめ、特殊な表記を行うことで複数の文字を一度に対象パターンとして取り扱う。POSIX文字クラスは文字クラス同様、ブラケットを利用した記述を利用するが、加えてコロン (:)によってPOSIX文字クラス名を囲むという特徴がある。Rで利用可能なPOSIX文字クラスについて表XXに示した。

POSIX文字クラス 対象
[:alnum:] アルファベットと数値([:alpha:] + [:digit:])
[:alpha:] 大小文字アルファベット([:upper:] + [:lower:])
[:upper:] 大文字アルファベット
[:lower:] 小文字アルファベット
[:digit:] 数値
[:blank:] 空白文字、スペースとタブ
[:cntrl:] 制御文字
[:graph:] 空白以外の文字 ([:alnum:] + [:punct:])
[:print:] 印字可能な文字([:graph:] + スペース)
[:punct:] 補助符号を含めた句読点(! ” # $ % & ’ ( ) * + , - . /)
[:space:] すべての空白文字
[:xdigit:] 16進数で認められている文字(0-9a-fA-F)
x <- c("alphabet", "123456", "alnum789", "123 456")
grep("[[:alpha:]]", x, value = TRUE)
[1] "alphabet" "alnum789"
grep("[[:digit:]]", x, value = TRUE)
[1] "123456"   "alnum789" "123 456" 
grep("[[:space:]]", x, value = TRUE)
[1] "123 456"
# POSIX文字クラスでは字形セットやロケールを考慮したマッチを実行可能であり、
# Aを示す全てのバリエーションとマッチする
grepl("[[:alpha:]]", c("a", "A", "â", "Ä"))
[1] TRUE TRUE TRUE TRUE