対象:
CRuby
JRuby

正規表現

  1. 正規表現リテラル
  2. 正規表現記号
  3. 文字クラス指定
  4. 繰り返しの指定
  5. その他便利な機能

正規表現リテラル

/で囲まれた文字列は正規表現として解釈される。閉じ/の後にi(大文字小文字の区別を行わない)等のオプションを指定することもできる。

オプション意味
i大文字小文字の区別を行わない。
m正規表現記号"."が改行にもマッチする。
(正規表現の例)
/^abc/ =~ s # 行頭の"abc"にマッチ
/^JRuby/ !~ s # 行頭が"JRuby"でない(マッチしなかった場合にtrue)
/^ruby/i =~ s # 行頭の"ruby"に大文字小文字関係なくマッチ
/\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}[.]\d{3}/ =~ s # "2010/02/21 10:10:59.789"等日時にマッチ
/.*[.]txt$/ =~ s # 行末の".txt"にマッチ(ピリオドは[.])

正規表現記号

正規表現記号意味
^行頭にマッチする。
$行末にマッチする。
.改行を除く任意の1文字にマッチする。
\w英数字(=[0-9A-Za-z_])1文字にマッチする。
\W非英数字(\w以外の文字)1文字にマッチする。
\s空白文字(=[ \t\n\r\f])1文字にマッチする。
\S非空白文字(\s以外の文字)1文字にマッチする。
\d数字(=[0-9])1文字にマッチする。
\D非数字(\d以外の文字)1文字にマッチする。
\A先頭にマッチする。
\Z末尾にマッチする。末尾が改行の場合、その直前の文字にマッチする。
\z末尾にマッチする。
[ ]文字クラス指定

文字クラス指定

a、b、またはcの何れかの文字にマッチさせたい[abc]と文字を羅列する。([a-c]でも可)
0~7の数字にマッチさせたい[0-7]と-(ハイフン)を使って範囲指定。
a~z、または-(ハイフン)にマッチさせたい[a-z-]とa-zの後に-(ハイフン)を範囲指定と解釈されないよう先頭または末尾に記述。

繰り返しの指定

正規表現記号意味
*直前の文字の0回以上の繰り返し
+直前の文字の1回以上の繰り返し
?直前の文字の0または1回の繰り返し
{m}直前の文字のm回の繰り返し
{m,}直前の文字のm回以上の繰り返し
{m,n}直前の文字のm回以上、n回以下の繰り返し

更に高度な正規表現を記述するために、これ以外の記号も用意されている。

その他便利な機能

その他にもまだまだ便利な機能がある。例えば、

~ /abc/

は/abc/ =~ $_の略記法であり、ファイルを読み込んで中身を調べるときには重宝する。

open("test.log", "r") do |io|
  while io.gets
    print $_ if ~ /ruby/ # 読み込んだ行に"ruby"が含まれれば出力
  end
end

正規表現によるマッチと部分文字列の取出しを1行で書くことができる。以下のコードを見ていただきたい。if文で文字列を年/月/日の形式にマッチさせるとともに、()内にマッチした部分文字列を$1、$2、及び$3として取り出すことができる。因みにマッチした文字列全体は$&で取り出すことができる。

if /^(\d{4})\/(\d{2})\/(\d{2}).*/ =~ "2010/12/21 22:22:59"
  print "year: #{$1}\n" # 最初の括弧にマッチした文字列
  print "month: #{$2}\n" # 2番目の括弧にマッチした文字列
  print "day: #{$3}\n" # 3番目の括弧にマッチした文字列
end
(2010/02/21)

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]