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

正規表現とは

目次

  1. はじめに
  2. 正規表現とは
  3. 実践編
  4. 参考にしたWebサイト
  5. 参考になりそうなWebサイト、書籍

正規表現とは

ユーザーが入力したフォームから保存する値等の文字列の中に特定の文字が含まれているかを確認したり、特定の文字を取り除くといった操作をするための技術が正規表現です。

実践編

/文字列/

例えば、「NO PROGRAMMING, NO LIFE!」という文字列にマッチする正規表現を実際に書いてみると、以下のようになります。

/NO PROGRAMMING, NO LIFE!/

実際にマッチするかの検証には演算子「=~」を使います。

terminal
'NO PROGRAMMING, NO LIFE!' =~ /NO PROGRAMMING, NO LIFE!/
# => 0

「=~」は、文字列と正規表現がマッチするかを検証し、検証した場合には、マッチした部分文字列の先頭の文字の元の文字列内でのインデックス番号を返します。

大文字と小文字の区別

大文字と小文字を区別しないという正規表現の実装のためには「i」を使います。「i」は正規表現のオプション修飾子と呼ばれます。

/NO PROGRAMMING, NO LIFE!/i

この「i」は「Ignore Case」の略です。

メタ文字

その文字本来の意味とは異なり、特別な意味や機能を持つ文字のことです。このメタ文字を使うことによって、さらにできることが増えていきます。

たとえば、「?」は、直前の文字が0~1回繰り返された場合にマッチします。

/NO PROGRAMMING,? NO LIFE!?/i

こうすることで、大文字、小文字を区別しない、「,」と「!」の0~1回以上の組み合わせにマッチするということになります。

terminal
regex = /NO PROGRAMMING,? NO LIFE!?/i

'NO PROGRAMMING, NO LIFE!' =~ regex
# => 0

'NO PROGRAMMING, no life' =~ regex
# => 0

'no programming NO LIFE' =~ regex
# => 0

subメソッド,matchメソッド

subメソッド

文字列の中の指定した部分を別の部分に置換するためのメソッドです。第1引数に置き換えたい文字を指定し、第2引数に変換後の文字列を指定します。

terminal
irb(main):001:0> str = "NO PROGRAMMING, NO LIFE"
=> "NO PROGRAMMING, NO LIFE"

irb(main):002:0> str.sub(/PROGRAMMING/,"RAMEN")
=> "NO RAMEN, NO LIFE"

subメソッドには、gsubメソッド等のメソッドもあります。

matchメソッド

引数に指定した文字列がメソッドの対象の文字列に含まれているかどうかをチェックするメソッドです。含まれている場合は、指定した文字列がMatchDataオブジェクトとして得られます。

MatchDataオブジェクト

マッチした文字列等はMatchDataオブジェクトで返されます。
配列からデータを取り出す時と同様の形で、MatchDataオブジェクトからは文字列を取り出せます。

terminal
irb(main):001:0> str = "NO PROGRAMMING, NO LIFE"
=> "NO PROGRAMMING, NO LIFE"

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

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

参考にしたWebサイト

参考になりそうなWebサイト、書籍

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