独学文系エンジニアな日々

機械音痴な文系大学生が独学でプログラミングを学んだブログ

【10分】【そろそろ覚えたい】わかりやすい正規表現 - 入門編

f:id:sooriy25:20210228132204p:plain

はじめに

今回の記事はこんな人に向けて書いています。

正規表現なんてものは知らない、動けばいい」
正規表現をなんとなくコピペしている」
正規表現怖い」


最後まで読めばとりあえず「正規表現に対する恐怖心」はなくなります。





正規表現をかけ!


と言われてもいきなり覚えるのは大変です。
ですが

毎回全てを一から自分で考えてかけ!

といっているわけではありません。
基本的には、ネットにいろいろな情報が落ちているので、まずはコピペしたものが間違っていたら


あれ?なんかこの正規表現おかしくない?


となれるレベルになれれば、複雑なシステムを担当しない限り必要としません。

今回目指すところ  コピペしてきた正規表現が正しいかどうかを理解できる。

いきなり複雑な正規表現を書くのは難しいと思うのでこうした積み重ねからちょっとずつ始めていきましょう。

ではさっそく正規表現について学んでいきます。


正規表現とは

正規表現(せいきひょうげん、英: regular expression)は、文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。

引用: wikipedia

文字列を記法に沿って表現することです。
これらは文字を抜き出したり、文字列が規則通りであるかを調べたりするのに使ったりします。
表現するのには「メタ文字」という以下のような特殊文字を利用します。

.^$[]*+?|() ... etc


使い方は、環境や言語によって若干異なったりしますが基本は同じなのでまずは特殊文字の役割から理解してしまいましょう。


ワイドルカードと正規表現は違う

よく勘違いされるのですがワイルドカード正規表現は違います。
違いとしてはワイルドカードより正規表現の方が複雑な条件を表現できます。

ワイルドカード 使えるのは「*」と「?」の二種類で表現できる
正規表現 「*」と「?」意外にもたくさんの記号で表現できる

正規表現のルール

正規表現にはルールがあります。
調べてみると以下のように表説明をしてくれている記事がたくさんあります。

基本的な正規表現一覧 | murashun.jp

正直、初めて読んでしっくりくる人はいないと思います。

量も多いし、使ってみないとわからない部分も多いはずなので、今すぐ全部暗記しなくても良いです。
まずは、この記号はこういう意味なんだというのをなんとなく理解できるようになれば良いです。

あるいは、以下のように検索すれば他にも説明してくれている記事がたくさんあります。
眺めてみても良いかもしれません。

・検索ワード例=> 正規表現 パターン
・検索ワード例=> 正規表現 一覧


正規表現おすすめの覚え方

いきなり上からかぶり付くと大変なので、4つに分類して覚えてみましょう。

分類  特殊な意味を表す
 繰り返しを表す
 文字の場所を表す
 文字のグルーピングを表す

・特殊な意味を表す

例:

  • 「.」=>何らかの1文字を表す

  • 「\s」=>タブ、改行、スペースを表す

  • 「\d」=>0~9の数字を表す

・繰り返しを表す

例:

  • 「*」=>ある文字が0文字以上繰り返している

  • 「?」=>直前の文字を何回繰り返している

・文字の場所を表す

例:

  • 「^」=>行の先頭を表す

  • 「$」=>行の最後を表す



・文字のグルーピングを表す

例:

  • 「()」=>カッコ内を1つの文字のグループにまとめる

  • 「[]」=>カッコ内に含まれるいずれかの1文字

正規表現はこれらの記号ルールに従って引っ掛けるための判定基準を作成していきます。

理解するためにまずは、上記のいくつかを実際に組み合わせて「記号の意味を体感していくと良い」です。

正規表現を試す便利なサービス

f:id:sooriy25:20210228135600p:plain



正規表現を練習する場所として、毎回保存して、毎回サーバーにあげて、とやっていたら大変です。
簡単に試す方法として、web上で簡単に試験できるツールがあります。

PHP/Javascript
正規表現チェッカー PHP: preg_match() / JavaScript: match()


Ruby
Rubular: a Ruby regular expression editor

他にも言語判定ごとに色々あったりしますので調べてみてください。

・ 検索ワード例=> 正規表現 チェックツール

では実際に試してみましょう。


試してみる

郵便番号かどうかを引っ掛けてみます。


まずは、パターンに分解してみてください。



郵便番号は000-0000みたいな感じなので、

「3桁の数字」と「ハイフン」と「4桁の数字」
のものは全部郵便番号に当てはまりそうです。

以下のように書いてみます。※解説は写真の後に


/^\d{3}-\d{4}$/


f:id:sooriy25:20210228124828p:plain

マッチしました。

逆に最後の対象の文字を5桁にしてみましょう。

f:id:sooriy25:20210228135039p:plain

一致しませんでした。と出ているので引っかかっていません。

では先ほど紹介した「正規表現おすすめの覚え方」から解説していくと

正規表現 説明
^ 先頭の一文字が
\d 0~9の数字
{3} 直前の文字0~9が3文字
- ハイフン(そのまま)
\d 0~9の文字
{4} 直前の文字0~9が4文字
$ が最後の文字

こんな感じで、一番最初のルール表をもとにしながらまずは、
色々組み合わせを使って実際に使い方を覚えましょう


手順のポイント 1.文字がどのように表現できそうか設計してみる
2.ツールなどで手軽に試してみる


あるあるパターンをやってみる

今回は「1つ」やってみましたが他にもありがちなパターンをいくつかコピペしてきてでもいいので体感してみてください。

例えばこんなものはよくあります。

  • 英数字5文字以上

  • 電話番号かどうかをチェック

  • IPアドレスをチェックする

  • URLであること、また、URLの一番最後だけを抜き出す

時間があればトレーニングしてみてください。

おわりに

なんとなく試行錯誤しながらできれば、スタートラインに立つことができたと思います。
正規表現を使う機会があればなるべく自分で考えるようにしてみて初心者脱出しましょう。