ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

Regexpクラス

オプション

i  / Regexp:IGNORECASE : 大文字小文字を無視
m  / Regexp::MULTILINE : 「.」で改行とマッチ
x  / Regexp::EXTENDED : 空白や#から始まるコマンドを無視

a = /abcdefg/i
a = Regexp.new("abcdefg", Regexp::MULTILINE | Regexp::IGNORECASE)
 => /abcdefg/mi

Match

a = Regexp.new("abc")
a.match("abcdefg")
 => #<MatchData "abc">
a =~ "abcdefg"     # 0
a === "abcdefg"   #true

マッチさせたい文字の位置

行頭(^)
行末($)
文字の行頭(\A) 
文字の行末(\Z,\z) Zは改行文字があってもマッチする

escape : .や[]などの文字をエスケープする

Regexp.escape("array.push(hsah[key])")
 => "array\\.push\\(hsah\\[key\\]\\)" 

last_match : マッチした結果を取得

/abcdefg/ =~ "abcdefghijklmnopqrstuvwxyz"
 => 0
Regexp.last_match
 => #<MatchData "abcdefg"> 
$~
 => #<MatchData "abcdefg"> 

#引数有り
/(abc)d(efg)/ =~ "abcdefghijklmnopqrstuvwxyz"
 =>0
Regexp.last_match(0)
 => "abcdefg" 
$&
 => "abcdefg" 
Regexp.last_match(1)
 => "abc" 
Regexp.last_match(2)
 => "efg" 
$2
 => "efg" 

union : 論理和

a = Regexp.new("abc")
b = Regexp.new("ABC")
c = Regexp.union(a,b)
 => /(?-mix:abc)|(?-mix:ABC)/ 
c =~ "abc"
 =>0

オプションや属性

options : Regexp::EXTENDED, IGNORECASE, MULTILINEの論理和
casefold? : Regexp::IGNORECASEが設定されたかを返す
kcode : コンパイルされている文字コード
source : 世紀表現の元となった文字列表現

a = Regexp.new("abcdefg", Regexp::MULTILINE | Regexp::IGNORECASE)
a.options
 => 5
a = Regexp.new("abcdefg", nil, "u")
a.kcode
 => "utf8"
a.source
 => "abcdefg"

その他、記号

/./  : 任意の一文字
/\w/ : a〜z
/\d/ : 0〜9
/\s/ : 空白文字

繰り返し

/*/ : 前の文字列が0回以上の繰り返し
/+/ : 前の文字列が1回以上の繰り返し
/?/ : 前の文字列が0回、または1回の繰り返し