Splunkでよく使う正規表現パターンまとめ

前置き
---
- Splunkを使ってフィールドを抽出する際の正規表現の記載方法まとめ
- 正規表現ってたまにしか使わないから、すぐ忘れちゃいます。なので備忘録。
- Splunkの画面でも正規表現チェックはできますが、実際に正規表現を色々試すのによく使うサイト→　[regex101](https://regex101.com/)
<img width="1134" alt="スクリーンショット 2019-10-15 22.38.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/07224c7d-61dd-ef15-129b-47c49cbca405.png">
色でハイライトしてくれるからすっごくわかりやすい。オススメです。

ケース：URLからドメイン部分までを取得したい　
----
```rex:サンプルログ
url=http://aaa-v.weather.xxxxx.com/en-US/yyy/
```

- 「http;//aaa-v.weather.xxxx.com」部分を抽出したい場合

```rex:正規表現
url="(?P<domain>(http|https):\/\/.*?)\/
```

- 結果
<img width="1183" alt="スクリーンショット 2018-12-26 7.50.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/185759/aad95f3e-3512-e15c-e6de-a9aa2b9f9742.png">


ケース：小数点を含む数字を取得したい
----
```rex:サンプルログ
{u'Temperature': 15.2}	
```
- 「15.2」部分を抽出したい場合

```rex:正規表現
u'Temperature': (?P<Temperature>\d+(?:\.\d+)?)
```

- 結果
<img width="1028" alt="スクリーンショット 2018-12-26 9.23.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/185759/abef9368-9359-aba4-1ecd-06e4d0ea090a.png">


ケース：MACアドレスを取得したい　
----
```rex:サンプルログ
[{u'_id': u'02:00:00:36:ee:e8'}]
```

- 「02:00:00:36:ee:e8」部分を抽出したい場合

```rex:正規表現
u'_id': u'(?P<sub_id>[a-fA-F0-9]{2}[\:\-][a-fA-F0-9]{2}[\:\-][a-fA-F0-9]{2}[\:\-][a-fA-F0-9]{2}[\:\-][a-fA-F0-9]{2}[\:\-][a-fA-F0-9]{2})
```

- 結果
<img width="847" alt="スクリーンショット 2018-12-26 9.27.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/185759/55d9f269-7997-ffd5-de22-aff53ad6fbc9.png">


ケース：(サーチ時に*)Microsoft DNSログから綺麗に DNSクエリのFQDN部分のみ切り出したい　
----
```rex:サンプルログ
(13)notifications(6)google(3)com(0)
```

- (13),(6),(3)などの数字をのぞいて、「notifications.google.com」を抽出したい場合

```rex:正規表現
| rex mode=sed "s/\(\d+\)/./g" field=query
| rex mode=sed "s/^\.|\.$//g" field=query
```

- 結果
<img width="955" alt="スクリーンショット 2019-02-01 14.21.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/185759/3d4fa01a-0fb0-00bf-1c25-9631004c35a7.png">


ケース：（sysmonログから）MD5とSHA256を取り出したい　
----
```rex:サンプルログ
<Data Name='Hashes'>MD5=B8CB2DFCA7379908B0605331A759AF4C,SHA256=B0832DEC07A4CB6228B7B392D6ABAFB79E9BF7327605AE3E86E1E617DE7495A5</Data>
```
- MD5とSHA256を抽出したい場合

```rex:正規表現
MD5=(?<md5>.*),SHA256=(?<sha256>(\b[A-Z\d]{64}\b)|(?:(?!\b[A-Z\d]{64}\b).)*)
```

- 結果

![スクリーンショット 2020-05-07 14.10.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/3783416e-aed2-e78f-5c60-41cb42e251c3.png)



ケース：メールアドレスからドメイン部を抜き取る　
----
- 参考記事：[Let'sプログラミング](https://www.javadrive.jp/regex-basic/sample/index3.html)
    - 上記サイトに正規表現の解説もあります。

```rex:サンプルログ
test@sample.co.jp
```
- ドメイン部を抽出したい場合

```rex:正規表現
(?<tld>([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$)
```

- 結果

![スクリーンショット 2020-12-22 14.39.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/46d0889c-7d6f-7247-126a-cf1adb355ea5.png)


ケース：IPアドレス部分を抽出したい場合　
----

```rex:サンプルログ
Received-SPF: pass (google.com: domain of bounces+3639386-6313-damosaison=toadspestcontrol.com@em.brighttalk.com designates 167.89.110.50 as permitted sender) client-ip=167.89.110.50;
```
- IPアドレスをclient_ipフィールドとして抽出

```rex:正規表現
(?<client_ip>(?:[0-9]{1,3}\.){3}[0-9]{1,3})
```

- 結果
![スクリーンショット 2021-07-13 16.43.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/7bc59477-01e3-4e90-595a-b0058c26f87c.png)