Regexp
公式サイト:
class Regexp | Ruby リファレンスマニュアル [公式]
使い方
参考:
リテラル
参考:
正規表現リテラル | Ruby リファレンスマニュアル [公式]
=~ 演算子
文字列に対して正規表現とのパターンマッチを行う。マッチしたときはマッチした部分の位置を整数で返し、組み込み変数 $&, $1, $2, … などに値がセットされる。マッチしなかったら nil を返す。
name =~ /Alice|Bob/Code language: Ruby (ruby)
右辺に Regexp 以外のオブジェクトを指定すると false を返す。右辺に文字列を指定すると TypeError が発生する。
"string" =~ "string"
# => TypeError: type mismatch: String givenCode language: Ruby (ruby)
参考:
String#=~ | Ruby リファレンスマニュアル [公式]
Regexp#=~ | Ruby リファレンスマニュアル [公式]
NilClass#=~ | Ruby リファレンスマニュアル [公式]
Object#=~ | Ruby 2.7.0 リファレンスマニュアル [公式]
=== 演算子
参考:
Regexp#=== | Ruby リファレンスマニュアル [公式]
match
参考:
Regexp#match | Ruby リファレンスマニュアル [公式]
String#match | Ruby リファレンスマニュアル [公式]
sub / sub!
最初にパターンに一致する部分を置き換える。
"barbar".sub("bar", "foo")
# => "foobar"Code language: Ruby (ruby)
参考:
String#sub | Ruby リファレンスマニュアル [公式]
String#sub! | Ruby リファレンスマニュアル [公式]
gsub / gsub!
パターンに一致する部分を全て置き換える。
str.gsub(/joh?n/, "John")Code language: Ruby (ruby)
() でキャプチャした文字列は \1、\2、… として参照できる。
参考:
String#gsub | Ruby リファレンスマニュアル [公式]
String#gsub! | Ruby リファレンスマニュアル [公式]
grep
参考:
Enumerable#grep | Ruby リファレンスマニュアル [公式]
scan
参考:
String#scan | Ruby リファレンスマニュアル [公式] 
escape
参考:
Regexp.escape | Ruby リファレンスマニュアル [公式]
new / compile
参考:
Regexp.compile | Ruby リファレンスマニュアル [公式]
メタ文字/メタ文字列
メタ文字
()[]{}:括弧.:ドット?:疑問符+:プラス*:アスタリスク|:垂直線\:バックスラッシュ/円記号
メタ文字列
\t:水平タブ\v:垂直タブ\n:改行\r:復帰\f:改ページ
参考:
文字クラス [ ] 内でエスケープしなくてもよい記号 | TechRacho
メタ文字列とリテラル、メタ文字とエスケープ | Ruby リファレンスマニュアル [公式]
文字 – 正規表現 | Ruby リファレンスマニュアル [公式]
文字クラス
略記法
\w:単語構成文字[a-zA-Z0-9_]\W:非単語構成文字[^a-zA-Z0-9_]\s:空白文字[ \t\r\n\f\v]\S:非空白文字[^ \t\r\n\f\v]\d:十進数字[0-9]\D:非十進数字[^0-9]\h:十六進数字[0-9a-fA-F]\H:非十六進数字[^0-9a-fA-F]
参考:
文字クラス [ ] 内でエスケープしなくてもよい記号 | TechRacho
文字クラスの略記法 | Ruby リファレンスマニュアル [公式]
改行
\R:改行文字にマッチする
改行と見なされる文字
utf-8の場合:(?>\x0D\x0A|[\x0A-\x0D\u{85}\u{2028}\u{2029}])asciiの場合:(?>\x0D\x0A|[\x0A-\x0D])
使用例
行頭が # の行を改行を含めて削除する。
str.gsub(/^#.*(\R|$)/, "")Code language: Ruby (ruby)
参考:
chomp / chop / strip / gsub による改行の削除徹底比較! | 侍エンジニア塾ブログ
特別な文字列に対するマッチ | Ruby リファレンスマニュアル [公式]
特殊変数
パターンマッチしたときに、以下の特殊変数にマッチの情報をセットします。
$~:最後にマッチしたときの情報(MatchDataオブジェクト)$&:マッチしたテキスト全体$`:マッチしたテキストの手前の文字列$':マッチしたテキストの後ろの文字列$1,$2, …:キャプチャ文字列$+:最後(末尾)のキャプチャ文字列
これらの変数は、スレッドローカルかつメソッドでローカルな変数。
参考:
Regexp.last_match | Ruby リファレンスマニュアル [公式]
オプション
i:大文字小文字を区別しないm:メタ文字の.が改行にマッチする (複数行マッチモード)x:フリーフォーマットモードo:#{}による式展開を一度限りに抑制する
参考:
x オプション
参考:
正規表現を複数行に分けて名前付きキャプチャをする | rails がんばる子
フリーフォーマットモード | Ruby リファレンスマニュアル [公式]
Regexp::EXTENDED | Ruby リファレンスマニュアル [公式]
文字コード
u:UTF-8e:EUC-JPs:WIndows-31J / Shift_JISn:ASCII
参考:
正規表現オブジェクトの文字コードの指定 | JavaDrive
エンコーディング – 正規表現 | Ruby リファレンスマニュアル [公式]
Regexp#encoding | Ruby リファレンスマニュアル [公式]
キャプチャ/グループ/後方参照
参考:
オプションを無効化する
m / i / x オプションを無効にしてパターンを使う。
"Hoge Fuga".match(/(?-mix:Hoge Fuga)/)[0]
# => "Hoge Fuga"Code language: Ruby (ruby)
参考:
オプション – 正規表現 | Ruby リファレンスマニュアル [公式]
What is ‘?-mix’ in a Ruby Regular Expression – Stack Overflow
MatchData
参考:
class MatchData | Ruby リファレンスマニュアル [公式]
captures
参考:
MatchData#captures | Ruby リファレンスマニュアル [公式]
named_captures
参考:
MatchData#named_captures | Ruby リファレンスマニュアル [公式]
先読み/後読み
参考:
正規表現の先読み/後読みを活用しよう | TechRacho
肯定先読み/否定先読み/肯定戻り読み/否定戻り読み | satosystems の日記
正規表現の先読み/後読みを「絞り込み」と理解してみる – Qiita
正規表現の先読みについて解説してみる | rubikitch
正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか – Qiita
Unicode 文字プロパティ
- 平仮名:
\p{Hiragana} - 片仮名:
[\p{Katakana}ー] - 漢字 (日中韓):
\p{Han} 
参考:
正規表現の Unicode プロパティと POSIX 文字クラス – Qiita
正規表現でユニコードの漢字/ひらがな/カタカナをマッチするには | 別館 子子子子子子
Unicode 文字プロパティについて | TechRacho
Unicodeブロック/スクリプトを使うと日本語の正規表現に便利 | There’s an echo in my head
UnicodeProps.txt – k-takata/Onigmo – GitHub
Unicode プロパティによる文字クラス指定 | Ruby リファレンスマニュアル [公式]
POSIX 文字クラス
参考:
POSIX 文字クラス | Ruby リファレンスマニュアル [公式]
日本語に合致させる
参考:
正規表現で日本語 (ひらがな/カタカナ/漢字) にマッチさせる | EasyRamble
全角文字/半角カナ
参考:
正規表現で、半角、かつ、日本語でない、かつ、スペースを含まないを表現する – Qiita
絵文字を扱う
参考:
Unicode / UTF8 を扱うための Tips – Qiita
絵文字を含む文字列の長さをカウントしたい | Tech Inside Drecom
What is an example regex in ruby that will match any emojis? – Stack Overflow
How do I remove emoji from string – Stack Overflow
絵文字に正規表現でマッチさせる
リポジトリ:
janlelis/unicode-emoji: Emoji Regex in Ruby – GitHub
franklsf95/ruby-emoji-regex: A regular expression that matches all Unicode Emoji characters – GitHub
コードポイント
参考:
正規表現で文字コード番号を利用する | ふわふわ Ruby on Rails
文字 – 正規表現 | Ruby リファレンスマニュアル [公式]
文字コード
参考:
Ruby の内部文字コードは UTF-8 ではない…だと…?! | TechRacho