-
Notifications
You must be signed in to change notification settings - Fork 0
/
regular-expression.qmd
61 lines (49 loc) · 3 KB
/
regular-expression.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#### コラム: 文字クラス・POSIX文字クラス
対象の文字が決まった文字列で生成されている場合には、文字クラスあるいはPOSIX文字クラスを利用すると良い。文字クラスとは、ブラケット (`[]`)で挟んだ範囲の文字をパターンとみなし、更に連続する文字列の場合、例えばAからZまでのアルファベッドを指定する際にABC..Zとするのではなく、`A-Z`と対象の文字列の範囲を`-`で文字をつなぐことで複数の文字をパターンに含めることができる。
<!-- 表: Rがサポートする文字クラス -->
| 文字クラス | 対象 |
|:-----------|:-----|
| [0-9] | アラビア数字 |
| [a-z] | 小文字アルファベット |
| [A-Z] | 大文字アルファベット |
| [ぁ-ん] | ひらがな |
| [ァ-ヶ] | カタカナ |
| [一-龠] | 漢字 |
| [\\x01-\\x7E] | 1バイト文字 |
```{r}
(string <- c("ひらがな", "カタカナ", "漢字", "ABC", "abc", "123"))
# A, B, C に含まれるパターン
grep("[A-C]", string, value = TRUE)
# ひらがなが該当するパターン
grep("[ぁ-ん]", string, value = TRUE)
# アンカーを利用して、ABC 以外のパターンとマッチさせる
grep("[^ABC]", string, value = TRUE)
# 複数の文字クラスを扱うこともできる
grep("[ぁ-んァ-ヶ一-龠]", string, value = TRUE)
grep("[0-9]{2,4}", x = c(10, 3), value = TRUE)
```
POSIX文字クラスは一致するパターンを特定の種類にまとめ、特殊な表記を行うことで複数の文字を一度に対象パターンとして取り扱う。POSIX文字クラスは文字クラス同様、ブラケットを利用した記述を利用するが、加えてコロン (`:`)によってPOSIX文字クラス名を囲むという特徴がある。Rで利用可能なPOSIX文字クラスについて表XXに示した。
<!-- 表: RがサポートするPOSIX文字クラス -->
| 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) |
```{r}
x <- c("alphabet", "123456", "alnum789", "123 456")
grep("[[:alpha:]]", x, value = TRUE)
grep("[[:digit:]]", x, value = TRUE)
grep("[[:space:]]", x, value = TRUE)
# POSIX文字クラスでは字形セットやロケールを考慮したマッチを実行可能であり、
# Aを示す全てのバリエーションとマッチする
grepl("[[:alpha:]]", c("a", "A", "â", "Ä"))
```