この間、年が明けたかと思えば、来週で3月終わるみたいですね。
大人になるにつれ、どんどん月日の流れが早く感じます。。気がつけばすっかりアラサーです、こんばんちは。つぎーです。
突然ですけど、正規表現って知ってますか?( ·ᴗ·̥̥̥ )
もっというと正規表現を使用して、文字列を構成したりできますか。
今回は最近熱い(個人的に)正規表現について、書いていこう思います☝( ◠‿◠ )☝
自分のためにも、備忘録的な意味合いを込めて。笑
そもそも正規表現とは、、
“正規表現(せいきひょうげん、英: regular expression)は、文字列の集合を一つの文字列で表現する方法の一つである。”
引用元:Wikipedia
これだけ聞かされても、全然イメージがわかないですよね。
どんなとこで使われているかを考えた時に真っ先に出てきたのは、画面の入力フォームです。
フォームでの入力チェックで正規表現が使われていることがしばしばあると思います。(電話番号、郵便番号、日付、メールアドレス、etc..)
正規表現を使用して構成された文字列をパッと見ただけで、それが何を表しているかとか、実際に、正規表現を使って文字列を作成することができますか?
僕はまだまだ見たり、調べたりしながらじゃないと書けないです。( °o°)
今回は、正規表現が使われている文字列で比較的わかりやすいものを使って簡単に説明していきます。
下に書いたやつが、比較的定番な正規表現を使った文字列です。これを見てすぐ理解できますか、、?
・使用頻度の高い正規表現式の一例
使用例 | 書き方 |
携帯電話番号 | ^0[789]0-\d{4}-\d{4}$ |
フリーダイヤル | ^(0120|0800)-\d{3}-\d{3}$ |
郵便番号 | ^\d{3}-\d{4}$ |
日付 (YYYY-MM-DD形式) | ^\d{4}-\d\d-\d\d$ |
数字意外にも”^”,”[]”,”()”,”{}”,”\d”,”$”などの記号が登場してます。この記号たちが一体何を意味しているかも併せて紹介します。
一例の記載の中で出てきた記号たち、これらはメタ文字と呼ばれています。
正規表現を理解するうえで、”メタ文字”を理解しておくことも重要になってくるのですが、ご存知ですかメタ文字。
メタ文字とは、“正規表現の中で特別な意味を持つ文字や記号”です。
・メタ文字一例
メタ文字 | 説明 |
^ (キャレット) | 直後の文字が行の先頭にある場合にマッチ。 |
[…] | 角括弧に含まれるいずれか1文字にマッチ。 |
(…) | 文字を1つのグループにまとめる。 |
{n} | 直前の文字の桁数を指定できる。 |
| | いずれかの条件(OR条件)として使われる。 |
\d | すべての数字 |
$ (ダラー) | 直前の文字が行の末尾にある場合にマッチ。 |
記載したメタ文字がどういうものか理解できたと思うので、正規表現にもどります。
携帯電話番号 | ^0[789]0-\d{4}-\d{4}$ |
携帯電話番号の文字列では、
先頭が”0″で始まり、”0″の次には”7″か、”8″か、”9″が当てはまり、そのあと”0″が当てはまるみたいです。
つまりハイフン前までの文字列は、”070″か、”080″か、”090″はマッチします。
その次が、”\d{4}”となっているので、4桁の数字が当てはまります。
最後が、”\d{4}$”です。こちらは、末尾に”$”がついているので、末尾が数字4桁の場合マッチします。
フリーダイヤル | ^(0120|0800)-\d{3}-\d{3}$ |
フリーダイヤルも携帯電話番号とそう違いは、、、ないみたいです。
違うのは先頭の記載の” ^(0120|0800)”の部分。
こちらは、先頭が”0120″ or “0800”で始まる場合マッチすることを表してます。
それ以降は、携帯電話と書き方が同じです。真ん中の文字列には、数字3桁が、末尾は数字3桁の場合マッチします。
郵便番号 | ^\d{3}-\d{4}$ |
郵便番号の文字列に関しては、これまでの記載を読んでいただけているのであれば、わかるとおもいます。
先頭が数字3桁、末尾が数字4桁の場合はマッチします。
日付 (YYYY-MM-DD形式) | ^\d{4}-\d\d-\d\d$ |
日付も多分大丈夫。
先頭が数字4桁、真ん中は、数字が2つ、末尾も数字が2つの場合マッチする構成となっていますm(_ _)m
今回は、正規表現のさわりの部分と比較的初歩の正規表現を使った文字列を自分への復習の意味を込めて紹介させてもらいました。正規表現に興味湧いてきました?
正規表現を覚えると、フォームでの入力チェック以外に、特定の文字列を検索することができるようになってくるので、検索スキルが大幅に向上します。知っておいて損はない!と思います。
僕も引き続き正規表現を学び、もっと複雑な正規表現を使った文字列が解読できたり、記載できるようにがんばります(^-^)/
以上です。お疲れ様でした。