【初心者から上級者まで】正規表現を学ぶためのツール・サイトまとめ

# はじめに

皆さん、正規表現は使いこなせていますか？
私は全く使いこなせません。

今回は、私自身が正規表現を学ぶ過程でお世話になった・利用したサイトやツールをまとめます。

# 対象読者

- 正規表現って何それおいしいの？な人
- 正規表現は普段の検索くらいには使うよ！な人
- 正規表現マスターしてます！な人

# 正規表現(`regular expression`)とは

[正規表現 - Wikipedia](https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE)

特定の文字列を表現するためのパターンです。
通常の文字(`a-z` や `0-9`)に加えて、`.` や `*` などの特殊文字(メタキャラクタ)から構成されます。

# どういう時に使うの？

- 単純に文字列を検索したい時
- 特定のパターンの文字列を検索・置換したい時
    - メールアドレス
    - URL
    - クレジットカード番号
    - 郵便番号
    - 電話番号
    - HTMLタグ 等々...

上記以外にも様々な使いみちが存在します。

プログラミングをする上で覚えておくと便利になること間違いなし！

# 正規表現を学べる記事・サイト

## [サルにもわかる正規表現入門](https://www.mnet.ne.jp/~nakama/)

初心者向けの入門記事を扱うサイト。

- 正規表現とは？
- メタ文字の種類
- パターンマッチの基礎

などなど、基本的な部分が網羅されており、分かりやすいです。

## [初心者歓迎！手と目で覚える正規表現入門・その１「さまざまな形式の電話番号を検索しよう」](https://qiita.com/jnchito/items/893c887fbf19e17d3ff9)

@jnchito さんの入門記事です。

シリーズ編となっており、全4編構成です。

身近な電話番号を題材にした導入から

- 各種メタ文字の役割
- キャプチャ
- エスケープ
- 先読み、後読み
- 後方参照

など、様々な部分を扱っており、とても参考になります。

## [エディタで学ぶ正規表現入門 (全18回)](https://dotinstall.com/lessons/basic_regexp_v2)

ドットインストールの入門記事です。

エディタ( Atom )を用いて正規表現を学べます。
動画形式になっており、実際に手を動かしながら学ぶことが出来ます。

## [RegexOne - Learn Regular Expressions -](https://regexone.com/)

全編英語の入門サイトです。

- 基礎レッスン(全14レッスン)
- 発展レッスン(全8レッスン)

から成り、初心者 - 中級者向けとなっています。
`Solution` ボタンを押すことで、即座に解説を確認でき、学習が進めやすい印象です。

## [Solve Regex | HackerRank](https://www.hackerrank.com/domains/regex)

こちらも英語サイトです。

- `Easy, Medium, Hard` 等の難易度や、カテゴリで検索が出来る。
-  アカウント登録・ログインすることで、ポイントやランク付等がされたり、進行状況を保存出来たりする。

等の特徴があります。

## [Regex Crossword](https://regexcrossword.com/)

正規表現を使ったクロスワードゲームが遊べるサイトです。

[チュートリアル](https://regexcrossword.com/challenges/tutorial/puzzles/1)から、[多角形を使ったクロスワード](https://regexcrossword.com/challenges/hexagonal/puzzles/1)など、初心者から上級者まで楽しめる作りとなっています。

最後まで解ければ、かなり正規表現が分かるようになっている筈です！

# 正規表現に関するツール

## [Rubular: a Ruby regular expression editor and tester](http://rubular.com/)

Ruby ベースの正規表現エディタで、オンラインでサクっと正規表現を試すことが出来ます。

画面下部にクイック・リファレンスが出ていたり、キャプチャを分かりやすく表示してくれるので非常に重宝します。
<img width="1177" alt="スクリーンショット 2018-11-15 12.26.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/241738/a7b9d6c3-774b-2093-ac64-5b326043a076.png">

## [Refiddle](http://refiddle.com/)

こちらもオンラインで使用できる正規表現エディタです。

Rubularを異なる点としては
- JavaScript
- Ruby
- .NET

から言語を選択することが出来ます。

## [Online regex tester and debugger](https://regex101.com/)

こちらのエディタでの最大の特徴は、**マッチに掛かった時間とステップ数を表示してくれる**点です。

あまり詳細には述べませんが、正規表現にもパフォーマンスがあります。

参考: [正規表現のパフォーマンスの話をされても全くピンと来なかった僕は、backtrackに出会いました。](https://qiita.com/mochizukikotaro/items/d36e61e56220da5f95d1)

`*` は貪欲マッチと呼ばれ、乱用するとステップ数の増加に繋がります。
自分が作った正規表現が意図した動きをするのか？という観点以外にも、パフォーマンスの観点を持つことが大切です。
このエディタでは、パフォーマンスやステップ数を計測することが出来るため、チューニングする際に使っています。

<img width="849" alt="スクリーンショット 2018-11-15 12.49.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/241738/7256059e-d169-a890-6198-d29c365ec8c1.png">

<img width="847" alt="スクリーンショット 2018-11-15 12.49.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/241738/0640901f-7326-f7ee-7bf8-e8f093bb31de.png">


# 最後に

正規表現は、シンプルな使い方から非常に高度なパターンマッチまで、多様な使い方が出来ます。
正規表現を学び、普段の開発をより豊かにしちゃいましょう！

# お願い

良いツール・サイトが見つかり次第、随時更新していきますが、

- こんなサイトもおすすめだよ！
- こんなツールもあるよ！

という方がいらっしゃいましたら、是非コメントお願いします🙏