はじめに
正規表現を用いた任意の文字列のチェック方法やその他できることをまとめる。
matchとsubメソッドについて
subメソッド
subメソッドは、文字列の指定した部分を別の文字列に置き換えるためのメソッドです。
第1引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を指定します。また、操作したい文字列は/で囲みます。
【例】
irb(main):001:0> str = "りんごを食べる"
=> "りんごを食べる"
irb(main):002:0> str.sub(/りんご/,"みかん")
=> "みかんを食べる"
「りんごを食べる」という文字列が「みかんを食べる」という文字列に置換されました。
matchマッチ
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
上の例では「Hello World」という文字列に、「Hello」という文字列が含まれているか否かをチェックしています。
MatchDataマッチデータ
マッチした文字列はまず、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
補足
gsubジーサブ
gが意味するのはグローバルマッチという言葉です。文字列内に指定した文字が複数含まれている場合、その全てを置換するという意味になります。
第一引数には正規表現、第二引数に置換する文字列を指定します。
gsubではなくsubを使用した場合、最初にマッチした1つだけが置換されます。
ターミナル
irb(main):001:0> tel = '090-1234-5678'
=> "090-1234-5678"
irb(main):002:0> tel.sub(/-/,'')
=> "0901234-5678"
# 最初のハイフンしか置換されない
irb(main):003:0> tel.gsub(/-/,'')
=> "09012345678"