エディター(Atom)を使って、正規表現の勉強をしてみた！後編

[前編はこちら](https://qiita.com/h0iga3shi13/items/c1e0daf144d64342799f)

##メタ文字のつづき

+ 選択子

**「 | 」**
or の意味
>「〇〇もしくは〇〇」を検索
![コメント 2020-09-04 194006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/1ae2855e-7fd7-1a73-b780-42afd10b78ab.jpeg)

**「()」**
()でくくった部分を明示的にする
>()でくくった範囲で「〇〇もしくは〇〇」を検索
![コメント 2020-09-04 201205.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/1844e4fa-e465-5feb-7403-05f9628de637.jpeg)

+ 文字クラス

**「[]」**
"任意の一文字のうちのどれか"を指定したい場合、[]の中に任意の一文字を入れる
>例 : cat, rat, hatのそれぞれの単語の頭文字を使って3つの単語すべてを検索したい
![コメント 2020-09-04 233705.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/50d25157-85ae-4b35-4aae-102a3eb4aaad.jpeg)

+ 文字クラス内で使えるメタ文字 その1

**「^」**
「[^」の直後についた文字を否定する
>例 : cat以外の文字を検索したい
![コメント 2020-09-04 235134.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/28c860f7-d650-a249-e43a-ec8e4d953c0a.jpeg)

+ 文字クラス内で使えるメタ文字 その2

**「-」**
範囲を表すメタ文字
>例 : AからFで表す文字を検索したい
![コメント 2020-09-04 235904.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/95625670-9d22-b6a7-051d-913279a3fb90.jpeg)
文字コード表[^1]
![コメント 2020-09-05 001007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/bda30f75-fdec-1879-ef17-cebdb5d23b00.jpeg)
*※範囲を使う注意点として、A(65)-F(70)はできるが、F(70)-A(65)といった文字コードさかのぼるような範囲指定はできないことに注意*

+ 文字クラス その3

**メタ文字のエスケープ**
>例 : それぞれ区切り記号が違う電話番号をすべて検索したい
メタ文字のエスケープには「\」使い、**否定**の**「^」**と**範囲**の**「-」**のような、文字クラス内で**特殊な意味を持ってしまう記号**の前に「\」を入れてエスケープ(意味を持たせないように)させる
![コメント 2020-09-05 003210.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/9ac7f900-583a-f4df-24a7-27bdf9833f73.jpeg)
ちなみに、「^」と「-」の位置を変えてあげる(「^」は「[」の直後を避けるため後ろにまわし、「-」は先頭に置くことで範囲となるのを避ける)だけでも、上と同じ検索結果となります。
![コメント 2020-09-05 004301.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/ce9cc348-8d2f-7165-d531-df7b334dd8f3.jpeg)

+ 改行

**「\r\n」**(Windows)
>例 : 空白や空の行を検索したい
![コメント 2020-09-05 090230.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/a694caa9-5cd4-5d3e-c29e-d0fc33cd305b.jpeg)


+ キャプチャ

**「()」**
「()」でくくった内容を記憶して「\$1」「$2」... という順番で取り出して検索や置換で使う
>例 : サイト名とURLが書かれたリストをhtmlのリンクタグに変更したい
![コメント 2020-09-05 090844.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/bed2a9c4-8410-f785-b630-8aa2f537cfc5.jpeg)
2行目は「,」のあとにスペースが入ってないのでそれも拾うために「?」を使って検索している

>![コメント 2020-09-05 091901.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/0cb5d1a1-8649-8303-2d7c-95e2b3ff013b.jpeg)
置換を使ってhtmlのリンクタグに変更

+ 後方参照

**「\1, \2, ...」**
キャプチャした順に「\1」や「\2」と置き換えて、正規表現の中でキャプチャした文字を使う
>例 : 2回連続で同じ数字が並んでいるところだけを検索したい
![コメント 2020-09-05 153840.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/81234729-6ca0-17e8-80ac-a70fe43834bd.jpeg)
「\d,\s\d」とすることで"数字 カンマ 空白 数字"という検索の形にし、
![コメント 2020-09-05 152716.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619833/d5c305b2-edc6-4a18-9113-7ae02e6a8428.jpeg)
最初の「\d」(数字)を「()」でキャプチャしつつ、キャプチャした内容(数字)を正規表現の中で使うため「\1」として後方参照し、キャプチャした内容(数字)と後方参照して同じ内容(数字)だけだったものが検索される


#終わりに
まだまだ正規表現の基礎的な部分であり、正規表現の世界はもっと奥が深いみたいです。まずはこの基本的な部分をしっかり使いこなせるようになってから、その先の奥深い世界を覗いてみようと思います。


参考にしたサイト
> [ドットインストール](https://dotinstall.com/)

[^1]: http://charset.7jp.net/jis.html