FrontPage  Index  Search  Changes  Login

(Ruby)正規表現

正規表現

Rubyでは正規表現はRegexp型のオブジェクトである。

a = Regexp.new('^s*[a-z]')
b = \^s*[a-z]\
c = %r{^s*[a-z]}

正規表現オブジェクトはRegexp#match(String)、=~、!~を使用してマッチングさせることができる。

$&にはマッチ部分の文字列が、$`にはマッチ部分の前の文字列が、$'にはマッチ部分の後の文字列が設定される。

a = \bar\
b = "foobarhoge"
b =~ a
puts $&    #=> bar
puts $`    #=>foo
puts $'    #=>hoge

アンカー

行頭にマッチ
$行末にマッチ
\A文字列の先頭にマッチ
\z文字列の末尾にマッチ
\Z\nで終わらない文字列の末尾にマッチ
\b単語境界にマッチ
\B単語境界以外にマッチ

文字列クラス

.改行を除くすべての文字にマッチ
[…][]内の任意の一文字にマッチ
[^…][]内以外の任意の一文字にマッチ
[a-z]範囲を表す
\w英数字と_にマッチ
\W英数字と_以外にマッチ
\s空白文字(スペース、タブ、改行、復帰)にマッチ
\S空白文字以外にマッチ
\d数字にマッチ
\D数字以外にマッチ

繰り返し

繰り返しは最長の文字列にマッチしようとするが、*の後に?を付けると最小マッチになる。

r*rの0回以上の繰り返し
r+rの1回以上の繰り返し
r?rが0回または1回
r{m,n}rの最低m回、最高n回の繰り返し
r{m,}rの最低m回の繰り返し

グループ

括弧を使えば、正規表現の語句をグループ化できる。 同じパターン内では、\1で1つ目のグループを参照し、\2で2つ目のグループを参照できる。パターン外では、$1,$2...で参照可能。

バックスラッシュシーケンス

置換文字列では、次のようなバックスラッシュシーケンスが利用可能。

\&最後のマッチ
\+最後にマッチしたグループ
\`マッチの前の文字列
'マッチの後の文字列

正規表現オプション

iアルファベットの大文字と小文字を区別しない
m改行を特別扱いしない(「.」が改行にマッチする)
x正規表現中の空白文字を無視してコメントを有効にする
o正規表現リテラル中の式展開を一度だけ行なう
nバイト列と見なしてマッチを行なう(日本語を意識しない)
eEUC文字列を扱う場合
sSJIS文字列を扱う場合
uUTF-8文字列を扱う場合
Last modified:2003/11/30 21:57:53
Keyword(s):
References: