Regexp

公式サイト:

class Regexp | Ruby リファレンスマニュアル [公式]

使い方

参考:

正規表現の使い方 – Qiita

正規表現の使い方 | tech-dig

Regexp クラス | JavaDrive

正規表現 | 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 リファレンスマニュアル [公式]

=== 演算子

参考:

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

参考:

正規表現をコンパイルするメモ – Qiita

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)

参考:

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

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

特別な文字列に対するマッチ | Ruby リファレンスマニュアル [公式]

特殊変数

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

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

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

参考:

正規表現 | Ruby リファレンスマニュアル [公式]

Regexp.last_match | Ruby リファレンスマニュアル [公式]

オプション

  • i大文字小文字を区別しない
  • mメタ文字の . が改行にマッチする (複数行マッチモード)
  • xフリーフォーマットモード
  • o#{} による式展開を一度限りに抑制する

参考:

オプション | Ruby リファレンスマニュアル [公式]

x オプション

参考:

正規表現を複数行に分けて名前付きキャプチャをする | rails がんばる子

フリーフォーマットモード | Ruby リファレンスマニュアル [公式]

Regexp::EXTENDED | Ruby リファレンスマニュアル [公式]

文字コード

  • uUTF-8
  • eEUC-JP
  • sWIndows-31J / Shift_JIS
  • nASCII

参考:

正規表現オブジェクトの文字コードの指定 | JavaDrive

エンコーディング – 正規表現 | Ruby リファレンスマニュアル [公式]

Regexp#encoding | Ruby リファレンスマニュアル [公式]

キャプチャ/グループ/後方参照

参考:

キャプチャ | Ruby リファレンスマニュアル [公式]

グループ | Ruby リファレンスマニュアル [公式]

オプションを無効化する

m / i / x オプションを無効にしてパターンを使う。

"Hoge Fuga".match(/(?-mix:Hoge Fuga)/)[0] # => "Hoge Fuga"
Code language: Ruby (ruby)

参考:

正規表現 | Rubyist Magazine

オプション – 正規表現 | 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

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

肯定先読み/否定先読み/肯定戻り読み/否定戻り読み | satosystems の日記

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

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

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

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

Unicode 文字プロパティ

  • 平仮名\p{Hiragana}
  • 片仮名[\p{Katakana}ー]
  • 漢字 (日中韓)\p{Han}

参考:

平仮名/カタカナの正規表現マッチをする方法 – Qiita

正規表現の Unicode プロパティと POSIX 文字クラス – Qiita

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

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

P の一族 | TechRacho

文字プロパティとは | TechRacho

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

UnicodeProps.txt – k-takata/Onigmo – GitHub

Unicode 文字プロパティ – SlideShare

Unicode プロパティによる文字クラス指定 | Ruby リファレンスマニュアル [公式]

POSIX 文字クラス

参考:

正規表現クラス [:alnum:] の罠 – Qiita

POSIX 文字クラス | Ruby リファレンスマニュアル [公式]

日本語に合致させる

参考:

正規表現で日本語 (ひらがな/カタカナ/漢字) にマッチさせる | EasyRamble

文字クラスにおける日本語 | JavaDrive

全角文字/半角カナ

参考:

Ruby で全角半角を判定 | うめすこんぶ

正規表現で、半角、かつ、日本語でない、かつ、スペースを含まないを表現する – 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

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

リポジトリ:

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

コードポイント

参考:

正規表現で文字コード番号を利用する | ふわふわ Ruby on Rails

文字 – 正規表現 | Ruby リファレンスマニュアル [公式]

文字コード

参考:

Ruby の内部文字コードは UTF-8 ではない…だと…?! | TechRacho

ドキュメント

正規表現 | Ruby リファレンスマニュアル [公式]

まとめ

正規表現の使い方 | JavaDrive

Ruby の正規表現を備忘録としてまとめてみた | yu8mada

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。

Protected by reCAPTCHA