はじめに
正規表現(RegExp)は、文字列のパターンを扱うための強力な手段です。
Rubyでも /pattern/
の形式で書くことでRegExpオブジェクトが生成され、文字列検索・抽出・置換などに活用されます。
ここでは、よく使う正規表現の構文を一覧で紹介します。
基本構文一覧
正規表現 | 意味・説明 |
---|---|
. |
任意の1文字(改行を除く) |
* |
直前の文字の0回以上の繰り返し |
+ |
直前の文字の1回以上の繰り返し |
? |
直前の文字の0回または1回 |
| |
OR(A または B) |
() |
グループ化(キャプチャ) |
[] |
任意の1文字を指定(文字クラス)例: [abc] は a か b か c |
[^] |
否定の文字クラス 例: [^abc] は a, b, c 以外 |
{n} |
直前の文字のn回の繰り返し |
{n,} |
n回以上の繰り返し |
{n,m} |
n回以上m回以下の繰り返し |
アンカー(位置指定)
正規表現 | 意味 |
---|---|
^ |
行の先頭 |
$ |
行の末尾 |
特殊文字(エスケープ付き)
正規表現 | 意味 |
---|---|
\d |
数字(0〜9) |
\D |
数字以外 |
\w |
単語文字(英数字とアンダースコア) |
\W |
単語文字以外 |
\s |
空白(スペース、タブ、改行など) |
\S |
空白以外 |
\t |
タブスペース |
Rubyでの使い方例
=~
を使ったマッチ位置の確認
マッチした場合は位置(インデックス)が返り、マッチしないと nil。
"abc123" =~ /\d+/ # => 3(3文字目に数字が登場)
"abc" =~ /\d+/ # => nil(マッチなし)
String#[]
を使ったマッチ部分の抽出
"2025-06-08"[/\d{4}/] # => "2025"(4桁の数字にマッチ)
"hello123"[/\d+/] # => "123"
sub
/gsub
を使った置換
-
sub:
最初にマッチした部分だけ置換 -
gsub:
マッチしたすべての部分を置換
"hello123".sub(/\d+/, "") # => "hello"(最初の数字だけ除去)
"hello123world456".gsub(/\d+/, "-") # => "hello-world-"
scan
で複数のマッチを配列で取得
-
scan:
文字列の中から パターンに一致する部分をすべて探して、配列として返すメソッドです。
"abc123def456".scan(/\d+/) # => ["123", "456"]
"2024/12/31 2025/01/01".scan(/(\d{4})\/(\d{2})\/(\d{2})/)
# => [["2024", "12", "31"], ["2025", "01", "01"]]
まとめ
正規表現は、文字列の中から特定のパターンを見つけたり、置き換えたりする強力なツールですが、少し慣れが必要です。