正規表現について

1.正規表現とは

 

 文字列に特定の文字は入っているか、不要な文字を取り除くといった操作を行うための技術。

 

2.正規表現の特徴

  • 文字列の一部を変換できる → 電話番号登録時のハイフン(-)を空白に置き換えたり
  • 文字列が制約を満たしているか調べる → パスワード登録で8文字以上を満たしてるか
  • 文字列の一部を抽出 → メアドからドメインを抽出したり

 

3.正規表現の仕方

 

  • 使用メソッド

   sub, match

   sub → 指定した部分を別の文字列に置き換える

str = "アイスを食べる"
=> "アイスを食べる"

str.sub(/アイス/,"プリン")
=> "プリンを食べる"

   / /で囲んだ文字列が変わる。

 

   match → 指定した文字列が含まれてるか見る。

str = "Hello, World"
=> "Hello, World"

str.match(/Hello/)
=> #<MatchData "Hello">

str.match(/Hell/)
=> nil

   含まれてる場合は、MatchDataオブジェクトで返される。

   含まれない場合は、nilで返される。

 

  • メソッドを使ってみる

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"

 

   sub → 最初のハイフンだけ置き換える

   gsub → 全てのハイフンを置き換える

 

2. パスワードに英数字8文字以上の制約

   

irb(main):001:0> pass = 'Hoge1234'
=> "Hoge1234"

irb(main):002:0> pass.match(/[a-z\d]{8,}/i)
=> #<MatchData "Hoge1234">

 

   /[a-z\d]{8,}/i

   大文字小文字問わず、aからzまでの英数字が8回マッチする

 

   [a - z] → 角括弧で囲まれた文字のうち1個にマッチ

         アルファベットaからzまでのいずれかにマッチ

   \d → 数字にマッチ

   {n, m} → 一番少なくてn文字、多くてm文字出てくるものにマッチ

   i → 大文字、小文字問わずマッチ

 

3. メアドからドメインのみ抽出

   

irb(main):001:0> mail = 'hoge@aaa-bbb.com'
=> "hoge@aaa-bbb.com"

irb(main):002:0> mail.match(/@.+/)
=> #<MatchData "@aaa-bbb.com">

   

   /@.+/

   @マークから始まり、何かしらの文字が1回以上繰り返すものにマッチする

 

   . → 何かしらの文字にマッチ

   + → 前の文字が1回以上繰り返すとマッチ

 

 

感想

 楽に条件をつけることができるので便利!

 短いのはまだわかるが、長くなると全然わからなくなる。

 .match(/\d{3}-\d{4}/g)

 

また、何かパターン表記があれば追加する