【図が多め】ざっくり分かる正規表現_すぐ使える編

## この記事は何の記事？
正規表現をすぐ使えるように例を載せている記事です
また，以下のツール・言語での使用例を載せています
- VSCode
- grep コマンド
- Python3
- JavaScript

## 誰のための記事？
- とりあえずすぐに正規表現を使いたい方
- 難しい事は一旦抜きにしてすぐ使いたい方
- 文字少なめで，図が多めの説明が好きな方
- 正規表現の最初の一歩として軽くみたい方

## 正規表現が使えると何が嬉しいの
- 複雑な検索ができる
- より高度な一括置換ができ，作業効率が上がる
- 入力の検証がしやすくなる

## 軽めの前置き
これから色々とご紹介していきます
実際の VSCode などでの使い方については，
ページの最後の方で紹介しています

ゆくゆくはもっと覚えていけるとハッピーです

ということで早速見ていきましょう

## a または b を検索
![aorb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/f206d020-7b12-6b77-e3d0-89c2cf03cb21.png)

## ヒント1: [ ] と ( ) と |
![hint_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/34f6688f-9ba8-e5df-1965-88a31f744d72.png)


## a または b 以外を検索
![notaorb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/9430be3a-d5e9-f0d0-7759-7073ce3973f5.png)

## 「ab」 を検索
![ab.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/52ff05d4-9bbb-aea7-8d23-c15f5da05f0a.png)

## 「ab」 を含む行を検索
![abline.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/78e0ab73-5c6f-1c1a-62c9-8afd65de5953.png)

## ヒント2: 「.」と「*」
![dot_ast_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/5415862a-948b-6c36-48f0-651cc7f0bcbf.png)

## 「ab」 を含まない行を検索
![notabline.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/0b5b773a-7662-5a72-568b-379f9fa44397.png)

### VSCode 実行例
![notabline_vscode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/dee74e63-9d81-d368-e602-a0113a5e8648.png)


### grep コマンド実行例
grep コマンドで使用する場合，`-P` をつける必要があります
また，語尾の `.+$` が不要です
```text:re_e.txt
123abc
123xyz
abc123
xyz123
```

```bash
user@user:/path/$ grep -P '^(?!.*ab)' re_e.txt

123xyz
xyz123
```

### Python3 実行例
```Python
import re
pattern = re.compile("^(?!.*ab).+$")
pattern.search("aaaa")  # <re.Match object; span=(0, 4), match='aaaa'>
pattern.search("bbbb")  # <re.Match object; span=(0, 4), match='bbbb'>
pattern.search("0ab1")  # None
```

### JavaScript 実行例
```JavaScript
const reNotaorbLine = new RegExp("^(?!.*ab).+$")
console.log(reNotaorbLine.test("aaaa")) // true
console.log(reNotaorbLine.test("bbbb")) // true
console.log(reNotaorbLine.test("0ab1")) // false
```

## 先頭が ab で始まっている ab を検索
![head_ab.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/6b94ccb1-1328-996a-d805-fb3842afcff7.png)

## ヒント3: ^ について
![kasa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/97309f56-2af6-2298-1745-f1faa0b62867.png)

## 先頭が ab で始まっている行を検索
![head_ab_line.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/b524c9ce-16bb-9442-4bab-9c516e69d3a8.png)

## 末尾が ab で終わっている ab を検索
![tail_ab.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/c63a8276-a07c-43af-b364-1ca62dd5949a.png)

## 末尾が ab で終わっている行を検索
![tail_ab_line.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/312b26d9-57f3-8015-9c44-2add5f1b7963.png)

## 電話番号
![電話番号.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/8918e1b5-3ae3-b42d-03df-de904ece774b.png)

## ヒント4: 数字と繰り返し
![d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/ffc0add4-56c8-be11-7563-b03bcc05f83a.png)



## 正規表現の使い方
既に上でチラッと出てますが，改めて使い方を見てみましょう

### VSCode
1. `Ctrl + f` を押すと右上に検索欄が表示されます
1. 「.*」ボタンを押すと正規表現が使えるようになりますね
1. 後は入力欄に正規表現を添えて差し上げるだけです

![notabline_vscode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/dee74e63-9d81-d368-e602-a0113a5e8648.png)

### grep
`grep '{正規表現}' re_e.txt`

```bash
user@user:/path/$ grep '^ab' re_e.txt

abc123
```

### Python3

```Python
# インポートは忘れずに
import re

# 正規表現, 検査する文字列
re.match("[ab]", "a")

# 何回も使うなら正規表現オブジェクト(pattern)を用意すると便利
pattern = re.compile("(a|b)")
pattern.search("a")
```

### JavaScript
```JavaScript
// 「/」で囲うパターン
const regex1 = /^(?!.*ab).+$/
console.log(regex1.test("aaaa"))

// RegExp
const regex2 = new RegExp("^(?!.*ab).+$")
console.log(regex2.test("aaaa"))
```

## 大小の区別
![ignore.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/aac4ce01-5ce8-c803-7658-55090556b273.png)