#目次
- はじめに
- 正規表現とは
- 実践編
- 参考にしたWebサイト
- 参考になりそうなWebサイト、書籍
#正規表現とは
ユーザーが入力したフォームから保存する値等の文字列の中に特定の文字が含まれているかを確認したり、特定の文字を取り除くといった操作をするための技術が正規表現です。
#実践編
####/文字列/
例えば、「NO PROGRAMMING, NO LIFE!」という文字列にマッチする正規表現を実際に書いてみると、以下のようになります。
/NO PROGRAMMING, NO LIFE!/
実際にマッチするかの検証には演算子「=~」を使います。
'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回以上の組み合わせにマッチするということになります。
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引数に変換後の文字列を指定します。
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オブジェクトからは文字列を取り出せます。
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サイト、書籍