対象の文字が決まった文字列で生成されている場合には、文字クラスあるいは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)
# ひらがなが該当するパターン
grep("[ぁ-ん]", string, value = TRUE)
# アンカーを利用して、ABC 以外のパターンとマッチさせる
grep("[^ABC]", string, value = TRUE)
[1] "ひらがな" "カタカナ" "漢字" "abc" "123"
# 複数の文字クラスを扱うこともできる
grep("[ぁ-んァ-ヶ一-龠]", string, value = TRUE)
grep("[0-9]{2,4}", x = c(10, 3), value = TRUE)
POSIX文字クラスは一致するパターンを特定の種類にまとめ、特殊な表記を行うことで複数の文字を一度に対象パターンとして取り扱う。POSIX文字クラスは文字クラス同様、ブラケットを利用した記述を利用するが、加えてコロン (:
)によってPOSIX文字クラス名を囲むという特徴がある。Rで利用可能なPOSIX文字クラスについて表XXに示した。
[: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)
# POSIX文字クラスでは字形セットやロケールを考慮したマッチを実行可能であり、
# Aを示す全てのバリエーションとマッチする
grepl("[[:alpha:]]", c("a", "A", "â", "Ä"))