FrontPage  Index  Search  Changes  Login

niche programmer - (Ruby)正規表現 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!正規表現
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||バイト列と見なしてマッチを行なう(日本語を意識しない)
||e||EUC文字列を扱う場合
||s||SJIS文字列を扱う場合
||u||UTF-8文字列を扱う場合