ino-akiのブログ

ITエンジニアを目指して学習したことをアウトプットするブログ

subメソッド、matchメソッド

Rubyにおいて正規表現を利用するために重要な2つのメソッド

subメソッド
matchメソッド

 

subメソッドは、文字列の指定した部分を別の文字列に置き換えるためのメソッド

第1引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を指定する
操作したい文字列は/で囲む

irb(main):001:0> str = "りんごを食べる"
=> "りんごを食べる"

irb(main):002:0> str.sub(/りんご/,"みかん")
=> "みかんを食べる"

 

matchメソッドは、引数に指定した文字列がメソッドを使用した文字列に含まれているか否かをチェックするためのメソッド
含まれている場合は、指定した文字列がMatchDataというオブジェクトが戻り値になる
含まれていない場合は、nilが戻り値になる

irb(main):001:0> str = "Hello, World"
=> "Hello, World"

irb(main):002:0> str.match(/Hello/)
=> #<MatchData "Hello">

irb(main):003:0> str.match(/Good/)
=> nil

 

マッチした文字列はまず、MatchDataという種類のオブジェクトで返される

MatchDataから実際にマッチした文字列などを取り出したい場合は、以下の様に配列から最初のデータを取り出す時と同様の形で取り出すことができる
コード内において、変数「md」は「MatchData」
irb(main):001:0> str = "Hello, World"
=> "Hello, World"

irb(main):002:0> md = str.match(/Hello/)
=> #<MatchData "Hello">

irb(main):003:0> md[0]
=> "Hello"

 

これらの正規表現や関連するメソッドをプログラムに適用する際は、if文を使う

パターンにマッチした場合はマッチしたオブジェクトが返され、またマッチしなかった場合はnilが返ってくるため、その性質を使用してif文で処理を分ける
str = gets.chomp
if str.match(/good morning/)
  puts 'おはようございます!'
else
  puts 'あいさつが異なるようです。'
end