- Home ›
- Ruby入門 ›
- Ruby正規表現の使い方
直前の文字をmin回以上max回以下繰り返す文字列にマッチする({min,max})
直前の文字を指定した範囲の回数だけ繰り返し表れる場合にマッチするパターンを定義できます。例えば直前の文字を 3 回から 7 回まで繰り返す場合にマッチするパターンを作成できます。ここでは Ruby の正規表現で直前の文字を指定した範囲の回数繰り返した文字列にマッチするメタ文字「{min,max}」の使い方について解説します。
(Last modified: )
直前の文字をmin回以上max回以下繰り返す文字列にマッチする
{min,max}
は直前の文字を min 回以上 max 回以下繰り返す文字列にマッチします。範囲の回数の指定方法は次の通りです。
{min,max}
例えば直前の文字が 2 回から 4 回の範囲で繰り返し現れる場合にマッチする場合は次のように記述します。
/Go{2,4}gle/
上記の場合、直前の文字(今回は「o」)が指定した範囲の 2 回から 4 回の間繰り返し現れた場合にマッチします。その為、今回の場合でマッチするのは「oo」「ooo」「oooo」の場合です。
マッチするもの:
Google Gooogle Goooogle
マッチしないもの:
Ggle Gogle Gooooogle Goooooogle Gmgle
2番目の引数を省略する
2 番目の引数は省略することが可能です。 2 番目の引数を省略すると、直前の文字の最小出現回数だけが設定されます。上限はありません。
{min,}
カンマ(,)は省略しないで下さい。省略した場合は別の意味となります。
例えば直前の文字が 2 回以上繰り返し現れる場合にマッチする場合は次のように記述します。
/Go{2,}gle/
上記の場合、直前の文字(今回は「o」)が指定した範囲の 2 回以上繰り返し現れた場合にマッチします。その為、今回の場合でマッチするのは「oo」「ooo」「oooooooo」などです。
マッチするもの:
Google Gooogle Goooogle Gooooogle Goooooogle
マッチしないもの:
Ggle Gogle Gmgle
なお1番目の引数を省略した {,max}
や両方の引数を省略した {,}
はエラーとはなりませんが、マッチが必ず失敗します。
回数を指定する
括弧{}の中に数値を1つだけ指定すると指定した回数だけ直前の文字が現れる場合にマッチします。
{num}
例えば直前の文字が 3 回現れる場合にだけマッチする場合は次のように記述します。
/Go{3}gle/
上記の場合、直前の文字(今回は「o」)が 3 回現れた場合にマッチします。その為、今回の場合でマッチするのは「ooo」です。
マッチするもの:
Gooogle
マッチしないもの:
Ggle Gogle Google Goooogle Gooooogle Gmgle
メタ文字「*」「+」「?」との関係
範囲指定を使えばアスタリスク(*)、プラス(+)、クエスチョン(?)のメタ文字を範囲を使って表すことができます。
* {0,} 直前の文字を0回以上繰り返し + {1,} 直前の文字を1回以上繰り返し ? {0,1} 直前の文字が0回か1回
どちらの表記を使っても構いませんが、条件に合うのであれば「*」「+」「?」のメタ文字を使用した方がコンパクトに記述することが可能です。
では簡単なプログラムで確認してみます。
# encoding: UTF-8 def check(str) if /Go{2,3}gle/ =~ str then puts("○" + str) else puts("×" + str) end end print("「Go{2,3}gle」にマッチするかどうか") check("Ggle") check("Gogle") check("Google") check("Gooogle") check("Goooogle") check("Gooooogle")
下記のように実行して下さい。
-- --
Ruby の正規表現で直前の文字を指定した範囲の回数繰り返した文字列にマッチするメタ文字「{min,max}」の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。