正規表現の超頻出&使用例


## 正規表現とは
正規表現とは、「文字列に含まれるパターン」のことを指します。
つまり、正規表現を使ってソースコードやテキストを検索すると、「○○のパターンで記述された文字列」をまとめて検索することができます。

文字列の検索だけでは対象にならなかった文字列もまとめて検索対象にできることで、
いちいち検索条件を変更していた煩わしさを一気に解消することができます。
また、自分の書いたテキストが特定のフォーマット通りに記述できているか確認する際にも使用することができます。

:::note warn
注意
テキストエディタで正規表現を検索する場合は、必ず正規表現検索がonになっていることを確認してください。
:::

## 頻出正規表現
### 開始と終了
##### 正規表現

| 正規表現 | 意味                   |
|:--------|:----------------------|
| ^       | 直後の文字が行の先頭にある |
| $       | 直前の文字が行の末尾にある |


##### 使用例: 先頭の文字列を一斉に変えたい時

```text:変更前
2021/07/10 aaaaaa
2021/07/10 bbbbbb
2021/07/10 cccccc
```
○`2021`を`2022`に変更したい

1) `^2021`で検索
2) `2022`に置換

```text:変更後
2022/07/10 aaaaaa
2022/07/10 bbbbbb
2022/07/10 cccccc
```

##### 使用例: 行末にまとめて特定の文言を追加したい時
```text:変更前
2022/07/10 aaaaaa2022
2022/07/10 bbbbbb2022
2022/07/10 cccccc2022
```

○行末に`Happy`を追加したい
1) `2022$`で検索
2) `2022Happy`に置換

```text:変更後
2022/07/10 aaaaaa2022Happy
2022/07/10 bbbbbb2022Happy
2022/07/10 cccccc2022Happy
```


### 繰り返し文字
##### 正規表現

| 正規表現 | 意味                                |
|:--------|:-----------------------------------|
| *       | 0文字以上繰り返し(条件に合う最長部分に一致) |
| +       | 1文字以上繰り返し(条件に合う最長部分に一致) |
| {n}     | n回繰り返し(固定回数)                  |


##### 使用例: `s`が○回以上繰り返す文字列を検索したい
```text:例
tone
stone
sstone
ssstone
sssstone
ssssstone
```

1.`s*tone`で検索
```text:ヒットする文字列
tone
stone
sstone
ssstone
sssstone
ssssstone
```


2.`s+tone`で検索

```text:ヒットする文字列
stone
sstone
ssstone
sssstone
ssssstone
```


3.`s{3}tone`で検索

```text:ヒットする文字列
ssstone
sssstone
ssssstone
```

### 指定した文字
##### 正規表現

| 正規表現 | 意味                                |
|:--------|:-----------------------------------|
| \|       | または（OR）                         |
| []      | 括弧内で指定した文字のいずれか          |
| [^]     | 括弧内で指定した文字以外               |

```text:例
midoriya
uraraka
bakugo
todoroki
kaminari
asui
```

1) `(midoriya|todoroki)`で検索
```text:ヒットする文字列
midoriya
todoroki
```


2) `[u]`で検索(=`u`が含まれる)

```text:ヒットする文字列(下記文字列の中の'u')
uraraka
bakugo
asui
```


2) `[^midoriya]`で検索(=`m`または`d`または`o`または`r`または`i`または`y`または`a`が含まれない)

```text:ヒットする文字列(下記文字列の中の'm'or'i'or'd'or'o'or'r'or'i'or'y'or'a'の箇所)
uraraka
bakugo
todoroki
kaminari
asui
```

### 特定の文字
##### 正規表現

| 正規表現              | 意味                                                  |
|:---------------------|:------------------------------------------------------|
| \t                   | タブ                                                  |
| \n                   | 改行(改行コードがLF)                                   |
| \r                   | 改行(改行コードがCR)                                 |
| \d                   | 全ての数字(=[0-9])                                     |
| \D                   | 全ての数字以外(=[^0-9])                                |
| \w                   | アルファベット、アンダーバー、数字(=[a-zA-Z_0-9])       |
| \W                   | アルファベット、アンダーバー、数字以外(=[^a-zA-Z_0-9])   |


### [発展]組み合わせ
##### 例1)改行コードに関わらず、改行を検索したい
`[\r\n]+`

##### 例2)特定の文字列以降を検索したい
`\t.*`
(=タブ以降の全ての文字列を検索)


##### 例3)郵便番号を検索したい(電話番号も引っかかる笑)
`\d{3}-\d{4}$`

##### 例4)携帯電話番号を検索したい(先頭が0+数値2桁+数値4桁+数値4桁)
`^0\d{2}-\d{4}-\d{4}$`

##### 例5)URLを検索したい
`https?://[\w!\?/\+\-_~=;\.,\*&@#\$%\(\)'\[\]]+`


## 最後に
上記正規表現はあくまで頻出中の頻出であって、ほんのほんのごく一部です。
ただ、いきなりありふれた正規表現を見てもうげぇとなるので、いくつかまとめてみました。

都度、「この検索文字列、正規表現でまとめて検索できないかな〜。」と考えてみてください。
検索すれば、いくらでも先人たちの知恵が見つかるはずです。

めちゃくちゃとっつきにくい正規表現ですが使っていくと便利さに気づくので、
最初は少しずつ使う意識からもてたらいいですね。

「これ便利だよ〜」って正規表現があれば、ぜひぜひ共有してください。