Regexp
公式サイト:
class Regexp | Ruby リファレンスマニュアル [公式]
使い方
参考:
リテラル
参考:
正規表現リテラル | Ruby リファレンスマニュアル [公式]
=~ 演算子
文字列に対して正規表現とのパターンマッチを行う。マッチしたときはマッチした部分の位置を整数で返し、組み込み変数 $&
, $1
, $2
, … などに値がセットされる。マッチしなかったら nil
を返す。
name =~ /Alice|Bob/
Code language: Ruby (ruby)
右辺に Regexp
以外のオブジェクトを指定すると false
を返す。右辺に文字列を指定すると TypeError
が発生する。
"string" =~ "string"
# => TypeError: type mismatch: String given
Code 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