アウトプットを頑張る

初めてのプログラミング学習期間中の記録と、日頃読んでいる本をメモのアウトプットをがんばります。

【プログラミング学習】正規表現とは Part1

■プログラミング学習 f:id:yuma6128:20211201073919j:plain正規表現とは
正規表現とは、文字列の一部分を抽出・置換したり、
文字列が制約を満たしているかを調べるための表現方法です。
例:パスワードが6文字未満、メールアドレスに@がないとエラー

使うシーン
例えば、電話番号の入力などで、「-」のあるなしで入力制限がなかった場合、 ユーザーによって、登録が下記のようなバラバラの上になってしまいます。

ユーザーA 090-1234-XXXX
ユーザーB 0901234XXXX

このような状態でデータベースに保存されてしまうと管理が大変になってしまうため フォーマットを統一させるために、電話番号にハイフンが入っていたら、必要に応じて 処理をします。
このように、文字列に特定の文字が含まれているかを確認することや、特定の文字を取り除くなどの操作を行うための技術が正規表現です。
正規表現は、さまざまな言語で同じようなコードで表せるよう設計されいるためほとんどの記述をRubyJavaScriptなどの別言語間でも共有できます。
今回はRuby正規表現を書いていきます。

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

[1] pry(main)> str = "明日は晴れ"
=> "明日は晴れ"
[2] pry(main)> str.sub(/晴れ/,"")
=> "明日は雨"


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

[1] pry(main)> str = "ビジネスの未来"
=> "ビジネスの未来"
[2] pry(main)> str.match(/ビジネス/)
=> #<MatchData "ビジネス">
[3] pry(main)> str.match(/過去/)
=> nil


MatchData
マッチした文字列はまず、MacthDataという種類のオブジェクトで返されます。
MatchDataから実際にマッチした文字列などを取り出したい場合は、下記のように最初のデータを取り出すときと同様の形で取り出すことができます。
コード内の変数「md」は「MacthData」を意味します。

[1] pry(main)> str = "ビジネスの未来"
=> "ビジネスの未来"
[2] pry(main)> md = str.match(/ビジネス/)
=> #<MatchData "ビジネス">
[3] pry(main)> md[0]
=> "ビジネス"


Rubyプログラムに適用する方法
これらの正規表現や関連するメソッドをプログラムに適用する際は、if文を用います。
パターンにマッチした場合、マッチしたオブジェクトが返されます。マッチしなかった場合はnilが返ってくるため、その性質を使用して、if文で処理を分けます。

str = gets.chomp
if str.match(/hello/)
 puts 'こんにちは'
else
 puts 'あいさつが異なるようです'
end

今回は、subメソッド、matchメソッドの基本的な使い方をまとめてみました。 Part2で、正規表現のさまざまなパターンを使って、応用的な使用方法を紹介していきます。

Part 2はこちら

ingkiym926.hatenablog.com