Top > Ruby > 正規表現


正規表現

Ruby では、正規表現 (regular expression) は Regexp というオブジェクトである。

基本
文字列「line」に「abc」という文字が含まれているか否かを調べ、真偽の値を返す
  0
/abc/ =~ line
2つの文字列
文字列「line」に「abc」、「ef」のどちらかの文字列が含まれているか否かを調べる
  0
/abc|ef/ =~ line
大文字小文字の区別
正規表現の後ろに「i」と書くと、大文字小文字を無視する
  0
/ab/i =~ line

正規表現のメタ文字

記号意味意味
.任意の1文字a.*caで始まりcで終わる文字列
*直前の表現の0回以上の繰り返しab*cac, abc, abbc, abbbc,...
+直前の表現の1回以上の繰り返しab+cabc, abbc, abbbc, ...
?直前の表現の0回か、1回の繰り返しab?cde?facdf, abcdf, acdef, abcdef

文字クラスの使用

  • 角括弧[]は、その中に入っているどれか1文字を表す。 これを文字クラスと言う。
a[bc]d は abd 又は acd を意味する
  • この括弧の中でマイナス記号は文字の範囲を表す。また、[の直後の^(ハット)記号は、 補文字クラス(以下に続く文字以外の文字)を表す。
[a-z]   全ての小文字アルファベットを表す
[ac-e]  a, c, d, e
[^ac-e] a, c, d, e 以外の1文字
  • 角括弧[]の外の^(ハット)記号は、文字列の先頭位置を表す。
/^a/ は a で始まる文字列にマッチ
/^a/ =~ "abc" => 真
/b/  =~ "abc" => 真
/^b/ =~ "abc" => 偽
  • 同様に、$記号は行末の位置、又は改行を表す。
/b$/   =~ "abc"   => 偽
/c$/   =~ "abc"   => 真
/c$/   =~ "abc\n" => 真
/c\n$/ =~ "abc\n" => 偽
/c$\n/ =~ "abc\n" => 真

バックスラッシュ記法

バックスラッシュは、以下に続く1文字と一緒になって特別な意味を持つ。
\nや\rなどは文字列内で使われた場合と同じ意味を持つが、 それ以外にも以下の記法がある。

記号意味
\\, \., \*, \+, \?\, ., *, +, ?の文字そのもの
\d数字のクラス
\w英数字とアンダースコアのクラス
\s空白文字(スペース, タブ, 改行)のクラス
\D, \W, \Sそれぞれの小文字版の補文字クラス

例えば、\dは[0-9]と、\Dは[^0-9]と同じ意味を持つ。

変数に保存

正規表現の括弧にマッチした部分の文字列は、特殊変数 $1, $2... に保存される。

/(.*):(\d+)/ =~ "hoge:8080"
$1 に hoge が代入される
$2 に 8080 が代入される

置換

  • 文字列オブジェクトのメソッドであるgsubを使用すれば、
    正規表現にマッチする全ての文字を置換する事ができる
  • マッチした全ての部分を置換するのではなく、最初にマッチした部分だけを置換したい場合は
    subを使用する
  • !付きのメソッドは、そのレシーバ自体を加工する
      0
      1
      2
      3
    
    str = "sanachan"
    str.gsub(/a/, "A")  #=> "sAnAchAn"
    str.sub(/a/, "A")   #=> "sAnachan"
    str.sub!(/a/, "A")  #=> str == "sAnachan"
    

リロード   凍結解除 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Mon, 03 Jun 2019 14:37:49 UTC (1652d)