コンテンツにスキップ

正規表現

正規表現の作成

以下の方法で、Regexp クラスのインスタンスを生成できる。

  1. スラッシュ / で囲む。
  2. Regexp.new を使用する。
  3. パーセント記法 (%r) を使用する。
/Ruby/              # => /Ruby/
Regexp.new("Ruby")  # => /Ruby/
%r[Ruby]            # => /Ruby/

正規表現記号

メタ文字 説明 正規表現パターン例 一致する文字列の例
. 任意の 1 文字に一致 a.b "axb", "ayb", "azb"
[] 文字の集合で一致 [aiueo] "a", "o"
() グループを作成し、キャプチャ対象を指定 (abc)+ "abc", "abcabc"
^ 文字列の先頭に一致 ^start "start of string"
$ 文字列の末尾に一致 end$ "the end"
\ 特殊文字のエスケープ \\ \
| 選択肢のいずれかに一致 part1|part2 "part1", "part2"

繰り返し表現

メタ文字 説明 正規表現パターン例 一致する文字列の例
* 直前の文字またはグループが 0 回以上繰り返す ab*c "ac", "abc", "abbc"
+ 直前の文字またはグループが 1 回以上繰り返す ab+c "abc", "abbc"
? 直前の文字またはグループが 0 回または 1 回以上繰り返す colou?r "color", "colour"
{n} 直前の文字またはグループが n 回繰り返す a{3} "aaa"
{n,} 直前の文字またはグループが n 回以上繰り返す a{2,} "aa", "aaa", "aaaa"
{,n} 直前の文字またはグループが n 回以下繰り返す a{,2} "a", "aa"
{n,m} 直前の文字またはグループが n 回以上、m 回以下 繰り返す a{2,3} "aa", "aaa"

正規表現特殊文字

特殊文字 説明 正規表現パターン例
\d 数字に一致 \d+ /\d/ === "123"
\D 数字以外の文字に一致 \D+ /\D/ === "Hello, World!"
\w 単語文字(英字、数字、アンダースコア)に一致 \w+ /\w+/ === "user123"
\W 単語文字以外の文字に一致 \W+ /\W+/ === "!@#$%"
\s 空白文字(スペース、タブ、改行など)に一致 \s+ /\s+/ === " "
\S 空白文字以外の文字に一致 \S+ /\S+/ === "Hello,World!"
\A 文字列の先頭に一致 \AHello /\AHello/ === "Hello, World!"
\z 文字列の末尾に一致 World!\z /World!\z/ === "Hello, World!"
\Z 文字列の末尾または最後の改行の前に一致 World!\Z /World!\Z/ === "Hello, World!\n"

文字(バックスラッシュ記法)

記法 意味
\t 水平タブ
\v 垂直タブ
\n 改行
\r 復帰
\b バックスペース
\f 改ページ
\a ペル
\e エスケープ文字
\nnn 符号化バイト値の 8 進数表現 (nnn の 8 進数 3 文字で表現)
\xHH 符号化バイト値の 16 進数表現 (HH の 16 進数 2 文字で表現)
\cx, \C-x 制御文字 (xa から z までのいずれかの文字)
\M-x メタ
\M-\C-x メタ制御文字
\uHHHH ユニコード文字 (HHHH の 16 進数 4 桁)
\u{HHHHHH HHHHHH ....} ユニコード文字列 (HHHHHH は 16 進数 1 桁から 6 桁まで指定可能)