Regexp
参考:
=~ 演算子
文字列に対して正規表現とのパターンマッチを行う。マッチしたときはマッチした部分の位置を整数で返し、組み込み変数 $&
, $1
, $2
, … などに値がセットされる。マッチしなかったら nil
を返す。
name =~ /Alice|Bob/
右辺に Regexp
以外のオブジェクトを指定すると false
を返す。右辺に文字列を指定すると TypeError
が発生する。
"string" =~ "string" # => TypeError: type mismatch: String given
参考:
instance method String#=~ (Ruby 2.6.0)
instance method Regexp#=~ (Ruby 2.6.0)
instance method NilClass#=~ (Ruby 2.6.0)
instance method Object#=~ (Ruby 2.6.0)
=~ (String) | Ruby リファレンス (ref.xaio.jp)
=== 演算子
参考:
instance method Regexp#=== (Ruby 2.6.0)
match
参考:
Regexp#match | Ruby リファレンスマニュアル
String#match | Rubyリファレンスマニュアル
match (String) | Ruby リファレンス (ref.xaio.jp)
sub / sub!
最初にパターンに一致する部分を置き換える。
"barbar".sub("bar", "foo") # => "foobar"
参考:
instance method String#sub (Ruby 2.6.0)
instance method String#sub! (Ruby 2.6.0)
gsub / gsub!
パターンに一致する部分を全て置き換える。
str.gsub(/joh?n/, "John")
()
でキャプチャした文字列は \1
、\2
、… として参照できる。
参考:
instance method String#gsub (Ruby 2.6.0)
instance method String#gsub! (Ruby 2.6.0)
gsub, gsub! (String) | Ruby リファレンス (ref.xaio.jp)
grep
参考:
instance method Enumerable#grep (Ruby 2.6.0)
scan
参考:
instance method String#scan (Ruby 2.6.0)
scan (String) | Ruby リファレンス (ref.xaio.jp)
escape
参考:
singleton method Regexp.escape (Ruby 2.6.0)
new / compile
参考:
singleton method Regexp.compile (Ruby 2.6.0)
使い方
参考:
Ruby の正規表現を備忘録としてまとめてみた | yu8mada
Regexp クラス | Ruby 正規表現の使い方 (javadrive.jp)
メタ文字
参考:
文字クラス [ ] 内でエスケープしなくてもよい記号 | TechRacho
文字クラス
参考:
改行
\R
:改行文字にマッチする
utf-8
の場合:(?>\x0D\x0A|[\x0A-\x0D\u{85}\u{2028}\u{2029}])
ascii
の場合:(?>\x0D\x0A|[\x0A-\x0D])
例:
行頭が #
の行を改行を含めて削除する。
str.gsub(/^#.*(\R|$)/, "")
参考:
chomp、chop、strip、gsub による改行の削除徹底比較!| 侍エンジニア塾ブログ
特殊変数
パターンマッチしたときに、以下の特殊変数にマッチの情報をセットします。
$~
:最後にマッチしたときの情報(MatchData
オブジェクト)$&
:マッチしたテキスト全体$`
:マッチしたテキストの手前の文字列$'
:マッチしたテキストの後ろの文字列$1
,$2
, …:キャプチャ文字列$+
:最後(末尾)のキャプチャ文字列
これらの変数は、スレッドローカルかつメソッドでローカルな変数。
参考:
singleton method Regexp.last_match (Ruby 2.6.0)
オプション
i
:大文字小文字を区別しない
m
:メタ文字の .
が改行にマッチする (複数行マッチモード)
x
:フリーフォーマットモード
o
:#{}
による式展開を一度限りに抑制する
参考:
x オプション
参考:
Ruby の正規表現を複数行に分けて名前付きキャプチャをする | rails がんばる子
フリーフォーマットモード – 正規表現 (Ruby 2.6.0)
constant Regexp::EXTENDED (Ruby 2.6.0)
オプションを無効化する
m
/ i
/ x
オプションを無効にしたパターン
"Hoge Fuga".match(/(?-mix:Hoge Fuga)/)[0] # => "Hoge Fuga"
参考:
What is ‘?-mix’ in a Ruby Regular Expression – Stack Overflow
MatchData
参考:
class MatchData | Ruby リファレンスマニュアル
captures
参考:
instance method MatchData#captures (Ruby 2.6.0)
named_captures
参考:
instance method MatchData#named_captures (Ruby 2.6.0)
先読み/後読み
参考:
正規表現の先読み・後読み (look ahead、look behind) を活用しよう | TechRacho
正規表現 (肯定先読み、否定先読み、肯定戻り読み、否定戻り読み) | satosystems の日記
正規表現の先読み/後読みを「絞り込み」と理解してみる – Qiita
正規表現の先読みについて解説してみる | rubikitch
コラム 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。- Qiita
Unicode 文字プロパティ
参考:
正規表現でユニコードの漢字・ひらがな・カタカナをマッチするには | 別館 子子子子子子 ねこのここねこ
Unicode 文字プロパティについて | TechRacho
Unicodeブロック/スクリプトを使うと日本語の正規表現に便利 | There’s an echo in my head
Onigmo/UnicodeProps.txt at master · k-takata/Onigmo – GitHub
絵文字を扱う
参考:
ruby で unicode, UTF8 を扱うための Tips – Qiita
Ruby で絵文字を含む文字列の長さをカウントしたい | 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