正規表現の記法一覧（サンプルコード+暗記用動画）

# 勉強方法
ここで秒でテストできるので、使ってみてください（javascript）
なにはともあれ動かしてみるのが一番勉強になります。
https://scriptular.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/913f14ef-5dc3-2040-ff17-5b34b7d60fbd.png)

# 動画
こちらに暗記用動画を置いてます（寝る前や、手を動かして勉強するのが面倒なときにどうぞ）

動画はこちらから（画像クリックでyoutubeへ）
[![正規表現を覚えるための動画](https://i.ytimg.com/vi/PqXPuN_WubI/hqdefault.jpg?sqp=-oaymwEZCNACELwBSFXyq4qpAwsIARUAAIhCGAFwAQ==&rs=AOn4CLB20Ljtn0zaGRrMz6ekJm0BsgGs6w)](http://www.youtube.com/watch?v=x6lMGjXjzyI)
http://www.youtube.com/watch?v=x6lMGjXjzyI

# 正規表現勉強の際の勘所
* 正規表現はそれだけで本一冊書けるくらい奥が深いので、完璧を目指すよりかは基礎をまずはざっと覚えてしまい、実際にに必要になったときに本で調べるとよい
* 正規表現をマスターすれば特定のパターンを完全に拾えるかというとそうでもない。（要件によってどの程度の正確性が必要かによるが）ある程度シンプルに保たないと複雑になりがち。

# 正規表現
## 必ず覚えたい
1.  \d は「半角数字1文字」を表す
* [ab] 「aまたはbが1文字」
* [a-z]  「aからz」までのアルファベット
* {n,m} 「直前の文字が n 文字以上m 文字以下」
* {n} 「直前の文字がn文字」
* ? 「直前の文字が0個または1個」
* . 「任意の1文字」
* + 「直前の文字が1個以上」
* * 「直前の文字が0個以上」
* [^AB] 「A、Bではない任意の1文字」

## ぜひ覚えたい

1. ^ は行頭
* $  行末
* \t  タブ文字
* \n  改行文字
* \s  空白文字（スペース、タブ文字、改行文字等）
* abc|ABC  「文字列abcまたは文字列ABC」のOR条件
* 特殊文字は \ でエスケープする
* ( ) 　マッチする部分をキャプチャ。キャプチャした部分は置換するときに $1 で参照（\1 でも可能）
* ( ) 　キャプチャだけでなく、グループ化もできる
* (?: ) はキャプチャ無しでグループ化する場合に使う
* (ABC)? 　「文字列 ABC があり、または無し」を表す
* \w 　半角英数字とアンダースコア

## できれば覚えたい
1. \b  単語の境界
* * 、 + 　「貪欲」で最長マッチを返す
* *? や +? 　最短マッチを返す
* 改行コードは環境によって異なる場合がある
*  [ ] 内ではメタ文字の種類や使われる位置によって各文字の働きが異なる
*  [ ] {n,} 直前の文字がn個以上
*  [ ] {,n} 直前の文字がn個以下
*  [ ] \W、\S、\D、\B はそれぞれ \w、\s、\d、\b の逆の意味になる
* (?=abc) 　abcの直前の位置（先読み）
* (?<=abc)  abcの直後の位置（後読み）
* (?!abc) 　abc以外の直前の位置（否定の先読み）
* (?<!abc) abc以外の直後の位置（否定の後読み）
* （）の文字列は\1 や \2 で参照できる（後方参照）
* ?、*、+ などの量指定子は ( ) の後ろに付けることができる
* | を使ったOR条件では、各条件内でもメタ文字が使える
* メタ文字はバックスラッシュ（\）でエスケープする


# 実験
## 必ず覚えたい
#### \d は「半角数字1文字」を表す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/4fa45da9-ad53-48d9-37bf-4a4c4d21b82b.png)
##### gを最後につけると、一致するすべてのものを抽出。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/cc32bd95-6213-2640-2e99-a444598f69b1.png)
#### [ab] 「aまたはbが1文字」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/36d51052-6eb4-6732-94a7-5bf9c480d13d.png)
#### [a-z]  「aからz」までのアルファベット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/6d8ab922-40f8-f655-ebf0-d505e3a7c9cf.png)
#### {n} 「直前の文字がn文字」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/316f85b1-2c7a-9327-d1ef-66e851326b5c.png)
#### {n,m} 「直前の文字が n 文字以上m 文字以下」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/5ed5b5bb-ceb4-ba81-fea3-a8681cdb43d6.png)
##### 例えば9を直後につけると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/b42a0d27-725f-6426-3055-76d5b5ca2b38.png)
#### ? 「直前の文字が0個または1個」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/908e7739-8a58-44b7-dd53-6756649054d6.png)
#### . 「任意の1文字」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/53cfbb10-88c6-8355-c4fc-7eaa14f15b56.png)
#### + 「直前の文字が1個以上」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/72825340-6514-c7b2-7833-66a1893c7d82.png)
#### * 「直前の文字が0個以上」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/a97e8c52-5a0f-465a-5c26-1777cd0e490e.png)
#### [^AB] 「A、Bではない任意の1文字」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/2e470d44-6878-d5d2-8e94-caf9928a3dbd.png)

## ぜひ覚えたい
#### ^  行頭
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/ba0e4d8f-5072-63b6-3859-ace9ad70d4ba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/f21439a6-09b7-a70f-6811-b58a8bb2ec36.png)
#### $  行末
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/6d751876-45fd-1a5a-214f-7fc1e6274722.png)
#### \t  タブ文字
あ、うまく動いてないですね。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/9e4258f0-911c-53d6-b7b4-
ce0dcc265b6c.png)
#### \n  改行文字
→このサイトだとできないみたいなのでいったんパス。
#### \s  空白文字（スペース、タブ文字、改行文字等）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/532dc31f-175d-bc3a-475c-f3eeb802ee79.png)
#### abc|ABC  「文字列abcまたは文字列ABC」のOR条件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/33a759f6-3794-668d-de79-70dffabd85bd.png)
#### 特殊文字は \ でエスケープする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/c9372a11-7a06-bade-d221-a7c2ae079b47.png)
#### ( ) 　マッチする部分をキャプチャ。キャプチャした部分は置換するときに $1 で参照（\1 でも可能）
()で囲うとキャプチャすることができます。キャプチャしたもじを置換したり、利用するために使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/e773a03c-3da0-8913-9860-d5e839040ee0.png)
#### ( ) 　キャプチャだけでなく、グループ化もできる
abcをマッチさせたい場合、abcを（）で囲いましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/58d11339-c4eb-fc3c-9e3b-256f240a4715.png)
#### (?: ) はキャプチャ無しでグループ化する場合に使う
Match Groups:のところに何も表示されていないのがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/3fd1c223-68c7-1154-d522-135ee798a26c.png)
#### (ABC)? 　「文字列 ABC があり、または無し」を表す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/ac3a9ee9-22ce-908f-7d02-fcb4cb27dca0.png)
#### \w word.（アンダースコアを含む）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/aaee0cc4-b643-7784-74b7-f4c3c550ed8d.png)
#### \W none word.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647262/faad60ea-f43e-82f3-8b1e-d95f5d5045fd.png)

執筆中...