1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

正規表現とmatch,subメソッド

Last updated at Posted at 2022-11-16

はじめに

正規表現を用いた任意の文字列のチェック方法やその他できることをまとめる。

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"
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?