Help us understand the problem. What is going on with this article?

ITエンジニアの基礎 正規表現編

正規表現は平たくいうと、登録されるデータのフォーマットを調整する処理のこと。

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

具体例をあげると
アカウントの登録でパスワードが10文字未満だったり、メールアドレスに@が入っていなかったりすると
ユーザー登録ができなくなる、又は電話番号の登録で-入りで登録すると
-が抜かれた別のフォーマットで登録される処理のことです。

正規表現メソッド

  • subメソッド(置き換えメソッド)
  • matchメソッド  

subメソッド

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

具体例はこちら

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

irb(main):002:0> str.sub(/ラーメン/,"蕎麦")
=> "蕎麦を食べる"

matchメソッド

  引数に指定した文字列がレシーバの文字列に含まれているか否かをチェックするためのメソッドです。

irb
# 例1 単純使用で、nilが返すか返されないか

irb(main):001:0> str = "Hello, World"
=> "Hello, World"

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

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

# 例2 含まれたのを確認した上で出力する場合

   irb(main):001:0> rei = "Hello, World"
=> "Hello, World"

irb(main):002:0> kekka = rei.match(/Hello/)
=> #<MatchData "Hello">

irb(main):003:0> kekka[0]
=> "Hello"

MatchDataオブジェクト

マッチした文字列等はMatchDataオブジェクトで返されます。
MatchDataオブジェクトから文字列等を取り出す際は 「kekka[0]」のように指定して出力します。

具体使用例

電話番号のハイフンを取り除く

ここではハイフンを取り除く処理を書いてみます。
ただしsunとgsubでは使用に違いがあるので注意が必要です。

irb
   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メソッドの違い

  • subメソッド・・・最初の一文字のみ
  • gsubメソッド・・・全ての対象に

パスワードに英数字10文字以上という制約を設定する

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

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

matchメソッドのポイント1

  • [a-z]: 角括弧で囲まれた文字のいずれか 1 個にマッチ
  • \d: 数字にマッチ
  • {n, m}: 直前の文字が少なくとも n 回、多くても m 回出現するものにマッチ
  • i: 大文字・小文字を区別しない検索

メールアドレスからドメインの部分のみ抽出する

irb
   irb(main):001:0> mail = 'rei@camp.com'
=> "rei@camp.com"

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

matchメソッドのポイント2

  • 「.」どの1 文字にもマッチ
  • 「+」直前の文字の 1 回以上の繰り返しにマッチ

パターン表記

パターン 意味
[a-z] 角括弧で囲まれた文字のいずれか 1 個にマッチ
\d 数字にマッチ
{n, m} 直前の文字が少なくとも n 回、多くても m 回出現するものにマッチ
. どの1 文字にもマッチ
+ 直前の文字の 1 回以上の繰り返しにマッチ
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away