正規表現について
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)
また、何かパターン表記があれば追加する