Regexp

参考:

class Regexp (Ruby 2.6.0)

正規表現 (Ruby 2.6.0)

正規表現リテラル – リテラル (Ruby 2.6.0)

=~ 演算子

文字列に対して正規表現とのパターンマッチを行う。マッチしたときはマッチした部分の位置を整数で返し、組み込み変数 $&$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

参考:

instance method Regexp#match (Ruby 2.6.0)

instance method String#match (Ruby 2.6.0)

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)

使い方

参考:

正規表現の使い方 – Qiita

Ruby における正規表現の使い方 | tech-dig

メタ文字

参考:

文字クラス [ ] 内でエスケープしなくてもよい記号 | TechRacho

改行

\R:改行文字にマッチする

utf-8 の場合:(?>\x0D\x0A|[\x0A-\x0D\u{85}\u{2028}\u{2029}])

ascii の場合:(?>\x0D\x0A|[\x0A-\x0D])

例:

行頭が # の行を改行を含めて削除する。

str.gsub(/^#.*(\R|$)/, "")

参考:

改行っぽいものすべてにマッチする正規表現 – Qiita

chomp、chop、strip、gsub による改行の削除徹底比較!| 侍エンジニア塾ブログ

特殊変数

パターンマッチしたときに、以下の特殊変数にマッチの情報をセットします。

  • $~:最後にマッチしたときの情報(MatchData オブジェクト)
  • $&:マッチしたテキスト全体
  • $`:マッチしたテキストの手前の文字列
  • $':マッチしたテキストの後ろの文字列
  • $1, $2, …:キャプチャ文字列
  • $+:最後(末尾)のキャプチャ文字列

これらの変数は、スレッドローカルかつメソッドでローカルな変数。

参考:

正規表現 (Ruby 2.6.0)

singleton method Regexp.last_match (Ruby 2.6.0)

オプション

i:大文字小文字を区別しない

m:メタ文字の . が改行にマッチする (複数行マッチモード)

x:フリーフォーマットモード

o#{} による式展開を一度限りに抑制する

参考:

オプション – 正規表現 (Ruby 2.6.0)

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"

参考:

正規表現 | Rubyist Magazine (るびま)

What is ‘?-mix’ in a Ruby Regular Expression – Stack Overflow

MatchData

参考:

class MatchData (Ruby 2.6.0)

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

先読みを使ったパターン | RubyLife

正規表現 (肯定先読み、否定先読み、肯定戻り読み、否定戻り読み) | satosystems の日記

正規表現の先読み/後読みを「絞り込み」と理解してみる – Qiita

正規表現の先読み・後読みを極める!| あらびき日記

正規表現の先読みについて解説してみる | rubikitch

コラム 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。- Qiita

Unicode 文字プロパティ

参考:

正規表現でユニコードの漢字・ひらがな・カタカナをマッチするには | 別館 子子子子子子 ねこのここねこ

Unicode 文字プロパティについて | TechRacho

P の一族 | TechRacho

文字プロパティとは | TechRacho

Unicodeブロック/スクリプトを使うと日本語の正規表現に便利 | There’s an echo in my head

Onigmo/UnicodeProps.txt at master · k-takata/Onigmo – GitHub

Unicode 文字プロパティ | SlideShare

絵文字を扱う

参考:

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

絵文字に正規表現でマッチさせる

参考:

ticky/ruby-emoji-regex: A pair of Ruby regular expressions for matching Unicode Emoji symbols – GitHub

janlelis/unicode-emoji: Emoji Regex in Ruby – GitHub

franklsf95/ruby-emoji-regex: A regular expression that matches all Unicode Emoji characters – GitHub

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です