正規表現のクラス。正規表現のリテラルはスラッシュで囲んだ形式 で生成します。
/^this is regexp/
Regexp.new(string)
を使って正規表現オブジェクトを動的に生成する
こともできます。
Regexp.compile(string[, option[, code]])
Regexp.new(string[, option[, code]])
文字列をコンパイルして正規表現オブジェクトを生成して返します。第 2 引数が与えられて、その値が真であれば、生成された正規表現はアルファ ベットの大文字小文字を区別しません。第 2 引数が整数であった場合、 その値は Regexp::IGNORECASE、 Regexp::MULTILINE、 Regexp::EXTENDED の論理和でなければなりません。
第 3 引数が与えられた時には、$KCODE の値にかかわ
らず、指定された文字コードでマッチを行います。文字コードは
$KCODE
への代入と同様に文字列引数の最初の一文字で決定されま
す。
第 1 引数が正規表現であれば内容が同じ(ただし、上記フラグの内容はク リアされた)正規表現を複製して返します。このとき、複製した正規表現 に対して、第 2、第 3 引数の指定が設定されます。
正規表現のコンパイルに失敗した場合、例外 RegexpError が発生 します。
Regexp.escape(string[,kcode])
Regexp.quote(string[,kcode])
string の中で正規表現において特別な意味を持つ文字の直前にエ スケープ文字(バックスラッシュ)を挿入した文字列を返します。省略可能 な引数 kcode で文字列の文字コードを指定します (省略時は $KCODE の値が使用されます)。
文字コードの指定は $KCODE
と同様に行います。
Regexp.last_match
カレントスコープで最後に行った正規表現マッチの MatchData オ ブジェクトを返します。このメソッドの呼び出しは $~ の参照と同じです。
/(.)(.)/ =~ "ab" p Regexp.last_match # => #<MatchData:0x4599e58> p Regexp.last_match[0] # => "ab" p Regexp.last_match[1] # => "a" p Regexp.last_match[2] # => "b" p Regexp.last_match[3] # => nil
Regexp.last_match([nth]) ((<ruby 1.7 feature>))
整数 nth が 0 の場合、マッチした文字列を返します
($&)。それ以外では、nth 番目の括弧にマッチ
した部分文字列を返します($1,$2,...)。
対応する括弧がない場合やマッチしなかった場合には nil
を返し
ます。
/(.)(.)/ =~ "ab" p Regexp.last_match # => #<MatchData:0x4599e58> p Regexp.last_match(0) # => "ab" p Regexp.last_match(1) # => "a" p Regexp.last_match(2) # => "b" p Regexp.last_match(3) # => nil
正規表現全体がマッチしなかった場合、引数なしの
Regexp.last_match
はnil
を返すため、
last_match[1]
の形式では例外 NameError が発生します。
対して、last_match(1)
は nil
を返します。
self =~ string
self === string
文字列 string との正規表現マッチを行います。マッチした場合、
マッチした位置のインデックスを返します(先頭は0)。マッチしなかった
場合、あるいは string が nil
の場合には nil
を返
します。
組込み変数 $~ にマッチに関する情報が設定されます。
~ self
変数 $_
の値との間でのマッチをとります。ちょうど以下と同じ意
味です。
self =~ $_
casefold?
正規表現が大文字小文字の判定をしないようにコンパイルされている時、 真を返します。
kcode
その正規表現が対応するようにコンパイルされている文字コードを
$KCODE と同じ形式で返します。もし、正規表現が固定
コードに対してコンパイルされていない(マッチ時点での $KCODE
の値を用いる)場合には、nil を返します。
match(str)
MatchData オブジェクトを返す点を除いて、self =~ str
と
同じです。
正規表現にマッチした部分文字列だけが必要な場合に、
bar = /foo(.*)baz/.match("foobarbaz").to_a[1] foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz").to_a.indexes(1,2,3)
のように使用できます。(to_a は、マッチに失敗した場合を考慮しています。)
ruby 1.7 feature:
MatchData には、to_ary メソッドが定義されて
いるので上記の例は以下のように書くこともできます。(ここでの
`_
' は、$& を捨てるために適当に選んだ変数名)
_, foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz")
options ((<ruby 1.7 feature>))
正規表現の生成時に指定されたオプションを返します。戻り値は、
Regexp::EXTENDED
, Regexp::IGNORECASE
,
Regexp::MULTILINE
の論理和です。
p Regexp::IGNORECASE # => 1 p //i.options # => 1
source
その正規表現のもととなった文字列表現を生成して返します。
re = /foo|bar|baz/i p re.source # => "foo|bar|baz"
to_s ((<ruby 1.7 feature>))
正規表現の文字列表現を生成して返します。返される文字列は他の正規表 現に埋め込んでもその意味が保持されるようになっています。
re = /foo|bar|baz/i p re.to_s # => "(?i-mx:foo|bar|baz)" p /#{re}+/o # => /(?i-mx:foo|bar|baz)+/
ただし、後方参照を含む正規表現は意図通りにはならない場合があります。 これは現状、後方参照を番号でしか指定できないためです。
re = /(foo|bar)\1/ # \1 は、foo か bar p /(baz)#{re}/ # \1 は、baz # => /(baz)(?-mix:(foo|bar)\1)/
EXTENDED
バックスラッシュでエスケープされていない空白と # から改行までを無
視します。正規表現リテラル の //x オプションと同じ
です。(空白を入れる場合は\
でエスケープして\ (<-空白)
と
指定します)
IGNORECASE
文字の大小の違いを無視します。 正規表現リテラル の //i オプションと同じです。
MULTILINE
複数行モード。正規表現 "." が改行にマッチするようになります。 正規表現リテラル の //m オプションと同じです。