【Ruby】正規表現
本日は正規表現についてまとめました!
正規表現とは
文字列に特定の文字が含まれているかを確認する事や、
特定の文字を取り除く等の操作を行うための技術のこと。
例えば「入力された電話番号のハイフンを取り除く」や
「パスワードに英数字○文字以上」の制約を設定する時に使います。
特徴
・文字列の一部分を置換
例えば、電話番号のハイフンをから文字に置換することで
異なるフォーマットの文字列を同一フォーマットに変換できる!
・文字列が制約を満たしているか調べる
ユーザ登録の際に設定するパスワードにおいて8文字以上という
制約をつけたい時にも正規表現を用いて実装できる!
・文字列の一部分を抽出する
入力されたメールアドレスからドメイン部分のみ抽出したい時等に使用!
正規表現を実現する2つのメソッド
・subメソッド
文字列の指定した部分を別の文字列に置き換える。
第一引数に置き換えたい文字列、
第二引数に変換後の文字列を指定。
操作したい文字列は「/」で囲む。
※JSでは同じ機能を持つメソッドしてreplaceメソッドがある。
・matchメソッド
引数に指定した文字列がレシーバの文字列に含まれているか否かを
チェックするためのメソッド。
含まれている→指定した文字列がMatchDataオブジェクトの
返り値として得られる。 #<MatchData "〇〇">
含まれていない→返り値としてnilが得られる。
MatchDataオブジェクト
マッチした文字列等はMatchDataオブジェクトで返される。
MatchDataオブジェクトから文字列等を取り出す時、
配列からデータを取り出す時と同様に取り出せる。
電話番号のハイフンを取り除く
特定の文字列を取り除く、つまり「特定の文字をから文字に置換する」
という考え方。
subメソッドでは最初のハイフンしか置換されないので。
gsubメソッドを使う。
※gsubのgはグローバルマッチの「g」
文字列内で指定した文字が複数含まれている場合、
「その全てを置換する」という意味になる。
パスワードに英数字8文字以上という制約を設定
[a-z]‥‥‥角カッコに囲まれた文字のいずれか1個にマッチ
\d‥‥‥数字にマッチ
{ n, m }‥‥‥直前の文字が少なくともn回、多くてもm回出現するものにマッチ
i‥‥‥大文字・小文字を区別しない検索
実践的な利用例
メールアドレスからドメイン部分のみ抽出
. ‥‥‥どの1文字にもマッチ
+‥‥‥直前の文字の1回以上の繰り返しにマッチ
「.+」は何かしらの文字が1回以上繰り返すものにマッチする
「@.+」で「@から始まり何かしらの文字が1回以上繰り返すものにマッチ」
という意味になる。
よってメールアドレスからドメイン部分のみを抽出できる。
メールアドレスにバリデーションをかける時の記述例