正規表現についてメモ


正規表現

正規表現とは、文字列の一部分を抽出・置換したり、文字列が制約を満たしているかを調べるための表現方法。

正規表現を用いるシーン
登録フォームに電話番号を記入する欄の場合。ハイフンを付けて入力する人もいれば、ハイフン無しで入力をする人もいる。フォーマットを統一させるために、入力された電話番号にハイフンが入っていたら必要に応じて処理を行う。

入力欄:090-1234-5678

           ⇓   ハイフンを取り除く

    09012345678

このように、文字列に特定の文字が含まれているかを確認、特定の文字を取り除くなどの操作を行うための技術を正規表現という。


正規表現を利用するための2つのメソッド

◾subメソッド
◾matchメソッド

◾sub <置換>
subメソッドは、文字列の指定した部分を別の文字列に置き換えるためのメソッド。
第1引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を指定。また、操作したい文字列は/で囲む。

(例) 「パンを食べる」という文字列が「ご飯を食べる」という文字列に置換。

irb(main):001:0> str = "パンを食べる"
=> "パンを食べる"

irb(main):002:0> str.sub(/パン/,"ご飯")
=> "ご飯を食べる"


◾match <抽出・制約調査>
matchメソッドは、引数に指定した文字列がメソッドを使用した文字列に含まれているか否かをチェックするためのメソッド。含まれている場合は、指定した文字列がMatchDataというオブジェクトが戻り値で得られる。含まれていない場合は、戻り値としてnilが得られる。

(例) 「Good morning」という文字列に、「Good」という文字列が含まれているか否かチェックする

irb(main):001:0> str = "Good morning"
=> "Good morning"

irb(main):002:0> str.match(/Good/)
=> #<MatchData "Good">

irb(main):003:0> str.match(/Hello/)
=> nil


MatchData
マッチした文字列はMatchDataという種類のオブジェクトで返される。MatchDataから実際にマッチした文字列などを取り出したい場合は、配列から最初のデータを取り出す時と同様の形で取り出すことができる。

irb(main):001:0> str = "good morning"
=> "good morning"

irb(main):002:0> md = str.match(/good/)
=> #<MatchData "good">

irb(main):003:0> md[0]
=> "good"