正規表現について

# 初めに
投稿者が使用することになった正規表現を目的別にまとめます。正規表現についての解説ではなくこんな条件を指定したいをまとめたものですのでご注意ください。

# 基本的な正規表現について
基本的な正規表現については以下を参考にしてください。

https://murashun.jp/article/programming/regular-expression.html

https://qiita.com/List202/items/05a27c46d9b11d04fb39

http://gimite.net/help/devas-ja/all_regex.html

### (1)特定の文字・文字列を含まないそれ以前を指定する正規表現
　特定の文字・文字列を含まないそれ以前を指定する正規表現についてです。
```:#　特定の文字を含まないそれ以前を指定する正規表現
(.+)(?="特定の文字・文字列")
```
例えば、以下のようなファイル名とが拡張子(."特定の文字列")で囲われているデータがあると想定します。
```:# 正規表現を行いたい元のデータ
Test1.java
Test2.sql
Test3.java
Test4.java
Test5.sql
```
このとき、「__Javaのファイル名のみ__」を指定したいときの正規表現は以下のようになります。
```:# 「.java」を含まないそれ以前を指定する正規表現
(*)(?=\.java)
```
上記の指定結果です。
```:# 指定結果
Test1
Test3
Test4
```
### (2)特定の文字・文字列を含むそれ以前の文字列を指定したい
特定の文字・文字列を含むそれ以前の文字列を指定する正規表現についてです。
```:# 特定の文字・文字列を含むそれ以前の文字列を指定する正規表現
(.*)(?="特定の文字列")
```
例えば、文字列を「/」で区切っているデータがあると想定します。
```:# 正規表現を行いたい元のデータ
ABCDEF/abcdef
```
このとき、「__ABCDEF/__」を指定したいときの正規表現は以下のようになります。
```:# 「/」を含むそれ以前の文字列を指定する正規表現
(.*)(?=/)
```
上記の指定結果です。
```:# 指定結果
ABCDEF/
```


### (3)特定の文字・文字列を含むそれ以降を指定する正規表現
```:# 特定の文字・文字列を含むそれ以降を指定する正規表現
("特定の文字・文字列".*)
```
例えば、以下のような名前と敬称が「(敬称)」で囲われているデータがあると想定します。
```:# 正規表現を行いたい元のデータ
田中(君)
佐藤(さん)
```
このとき、「__(敬称)__」を指定したいときの正規表現は以下のようになります。
```:# 「(」を含むそれ以降を指定する正規表現
(\(.*)
```
上記の指定結果です。
```:# 指定結果
(君)
(さん)
```
### (4)特定の文字・文字列を含まないのそれ以降の文字列を指定したい
特定の文字・文字列を含まないのそれ以降の文字列を指定する正規表現についてです。
```:# 特定の文字・文字列を含まないのそれ以降の文字列を指定する正規表現
(?<="特定の文字・文字列")(.*)
```
例えば、以下のような名前と年齢を「:」で区切っているデータがあると想定します。
```:# 正規表現を行いたい元のデータ
田中:10歳
佐藤:30歳
```
このとき、「__年齢__」を指定したいときの正規表現は以下のようになります。
```:# 「:」を含まないそれ以降を指定する正規表現
(?<=:)(.*)
```
上記の指定結果です。
```:# 指定結果
10歳
30歳
```

### (5)年月日時間のフォーマットを指定したい
ミリ秒を含まない年月日時間のフォーマットを指定する正規表現についてです。
```:# 正規表現を行いたいフォマット(ミリ秒を含まない年月日時間)
YYYY-MM-DD hh:mm:ss
```
ミリ秒を含まない年月日時間のフォーマットを指定する正規表現は以下のようになります。
```:# ミリ秒を含まない年月日時間のフォーマットを指定する正規表現パターン1
[0-9][4]-[0-9][2]-[0-9][2] [0-9][2]:[0-9][2]:[0-9][2]
```
```:# ミリ秒を含まない年月日時間のフォーマットを指定する正規表現パターン2
[\d][4]-[\d][2]-[\d][2] [\d][2]:[\d][2]:[\d][2]
```
ミリ秒を含む年月日時間のフォーマットを指定する正規表現についてです。
```:# 正規表現を行いたいフォマット(ミリ秒を含む年月日時間)
YYYY-MM-DD hh:mm:ss.sss
```
ミリ秒を含む年月日時間のフォーマットを指定する正規表現は以下のようになります。
```:# ミリ秒を含む年月日時間のフォーマットを指定する正規表現パターン1
[0-9][4]-[0-9][2]-[0-9][2] [0-9][2]:[0-9][2]:[0-9][2]+(?:\.[0-9]+)?
```
```:# ミリ秒を含む年月日時間のフォーマットを指定する正規表現パターン2
[\d][4]-[\d][2]-[\d][2] [\d][2]:[\d][2]:[\d][2]+(?:\.\d+)?
```

### (6)カッコ内を指定したい
例えば、以下のような「{}」で区切っているデータがあると想定します。
```:# 正規表現を行いたい元のデータ
{あいうえお}、{かきくけこ}。{さしすせそ}
```
このとき、「__?????__」を指定したいときの正規表現は以下のようになります。
```:#「{}」を含まない「{}」の中にある文字列
(?<={).*?(?=})
```

### (7)符号(+,-)付き整数を指定したい
符号(+,-)付き整数を指定する正規表現についてです。(符号はついていてもいなくても可)
```:# 符号(+.-)付き整数を指定する正規表現パターン1
[+-]?\d+
```
```:# 符号(+.-)付き整数を指定する正規表現パターン2
[+-]?[0-9]+
```

### (8)符号(+,-)なし実数を指定したい
符号(+,-)なし実数を指定する正規表現についてです。
```:# 符号(+,-)なし実数を指定する正規表現パターン1
\d+(?:\.\d+)?
```
```:# 符号(+,-)なし実数を指定する正規表現パターン2
[0-9]+(?:\.[0-9]+)?
```

### (9)符号(+,-)あり実数を指定したい
符号(+,-)あり実数を指定する正規表現についてです。(符号はついていてもいなくても可)
```:# 符号(+,-)あり実数を指定する正規表現パターン1
[+-]?\d+(?:\.\d+)?
```
```:# 符号(+,-)付き実数を指定する正規表現パターン2
[+-]?[0-9]+(?:\.[0-9]+)?
```

### (10) 特定の文字・文字列を含まない行を指定したい
特定の文字・文字列を含まない行を指定する正規表現についてです。
```:#　特定の文字・文字列を含まない行を指定する正規表現
^(?!.*"特定の文字・文字列").*$
```
例えば、Java、SQL、Rubyのファイル名のデータがあると想定します。
```:# 正規表現を行いたい元のデータ
Test1.java
Test2.sql
Test3.java
Test4.rb
Test5.java
```
このとき、「__Javaを除くファイル名__」を指定したいときの正規表現は以下のようになります。
```:# 「Javaを除くファイル名」を指定する正規表現
^(?!.*\.java).*$
```
上記の指定結果です。
```:# 指定結果
Test2.sql
Test4.rb
```

### (11)前方で特定の文字・文字列が一致している行を指定したい 
前方で特定の文字・文字列が一致している行を指定する正規表現についてです。
```:# 前方で特定の文字・文字列が一致している行を指定する正規表現
^"特定の文字・文字列".*$
```
例えば、以下のような文字列データがあると想定します。
```:# 正規表現を行いたい元のデータ
東京タワー
東京スカイツリー
リトル東京
大阪万博
```
このとき、「__前方に東京がつく言葉__」を指定したいときの正規表現は以下のようになります。
```:# 「前方に東京がつく言葉」を指定する正規表現
^東京.*$
```
上記の指定結果です。
```:# 指定結果
東京タワー
東京スカイツリー
```

### (12)後方で特定の文字・文字列が一致している行を指定したい 
後方で特定の文字・文字列が一致している行を指定する正規表現についてです。
```:# 後方で特定の文字・文字列が一致している行を指定する正規表現
.*"特定の文字列"$
```
例えば、以下のような文字列データがあると想定します。
```:# 正規表現を行いたい元のデータ
東京タワー
東京スカイツリー
リトル東京
大阪万博
```
このとき、「__後方に東京がつく言葉__」を指定したいときの正規表現は以下のようになります。
```:# 「後方に東京がつく言葉」を指定する正規表現
*東京$
```
上記の指定結果です。
```:# 指定結果
リトル東京
```

### (13) 特定の文字・文字列1と特定の文字・文字列2を含まない間の文字特定の文字・文字列を指定したい
特定の文字・文字列1と特定の文字・文字列2を含まない間の文字特定の文字・文字列を指定する正規表現についてです。
```:# 特定の文字・文字列1と特定の文字・文字列2を含まない間の文字特定の文字・文字列を指定する正規表現
(?<="特定の文字・文字列1").*?(?="特定の文字・文字列2")
```
例えば以下のような「[]」に囲われた文字列データがあるとします。
```:# 正規表現を行いたい元のデータ
[こんにちは][こんばんわ][さようなら]
```
このとき「[]」の中身を指定したいときの正規表現は以下のようになります。
```:# 「[]」の中身を指定する正規表現
(?<=\[).*?(?=\])
```
上記の指定結果です。
```:# 指定結果
おはようこんにちはさようなら
```