正規表現 - Regular expression -

# 1. 主な正規表現の一覧

|No|正規表現|内容|
|---:|:---:|:---|
|1|`.`|何か1文字にマッチ|
|2|`[`abc`]`|このどれか1文字にマッチ|
|3|`[^`abc`]`|これ以外の1文字にマッチ|
|4|`[`a`-`c`]`|この範囲の1文字にマッチ|
|5|`\d`|数字1文字にマッチ|
|6|`\w`|英数字1文字にマッチ|
|7|`\s`|スペース（スペース、タブ、改行）にマッチ|
|8|`\t`|タブにマッチ|
|9|`\r`|改行（CR（16進数：0x0D、10進数：13））にマッチ|
|10|`\n`|改行（LF（16進数：0x0A、10進数：10））にマッチ|
|11|`\`|メタ文字 `.` `*` `+` `?` `\` `\|` `^` `$` `[` `]` `(` `)` `{` `}` のエスケープ|
|12|word1`\|`word2|どれかの単語にマッチ|
|13|`()`|グループ化でまとめる|
|14|`^`|先頭にある文字にマッチ|
|15|`$`|末尾にある文字にマッチ|
|16|x`*`|直前の文字の **0** 回以上繰り返す文字にマッチ|
|17|x`+`|直前の文字の **1** 回以上繰り返す文字にマッチ|
|18|x`{n}`|直前の文字を **n** 回繰り返す文字にマッチ|
|19|x`{n,}`|直前の文字を **n** 回以上繰り返す文字にマッチ|
|20|x`{m,n}`|直前の文字を **m** ～ **n** 回以上繰り返す文字にマッチ|
|21|x`?`|直前の文字があってもなくてもマッチ|
|22|`*?`|最短マッチ|
|23|`(`ab`)\1`|**(ab)** でマッチしたものを **\1** の位置でもう一度マッチ|
|24|m`(?=`x`)`|後ろに **x** がついているときだけ、**m** でマッチ（先読み）|
|25|`(?<=`x`)`m|前に **x** がついているときだけ、**m** でマッチ（後読み）|
|26|m`(?!`x`)`|後ろに **x** 以外がついているときだけ、**m** でマッチ（否定的先読み）|
|27|`(?<!`x`)`m|前に **x** 以外がついているときだけ、**m** でマッチ（否定的後読み）|

# 2. 正規表現の使用例

### 2.1. 何か1文字にマッチ
+ 任意の文字：`.`
&nbsp;   
+ 検索：`log.-txt`
    + `logA-txt`
    + logA0-txt
    + `logB-txt`
    + logB1-txt
    &nbsp;
+ 検索：`log..-txt`
    + logA-txt
    + `logA0-txt`
    + logB-txt
    + `logB1-txt`
    &nbsp;

### 2.2. 指定した文字のどれか1文字にマッチ
+ 指定した文字のどれか1文字：`[`abc`]`
&nbsp; 
+ 検索：`log[AB]-txt`
    + `logA-txt`
    + logA0-txt
    + `logB-txt`
    + logB1-txt
    + logC-txt
    + logC1-txt
    &nbsp;

### 2.3. 指定した文字以外の1文字にマッチ
+ 指定した文字以外の1文字：`[^`abc`]`
&nbsp; 
+ 検索：`log[^AB]-txt`
    + logA-txt
    + logA0-txt
    + logB-txt
    + logB1-txt
    + `logC-txt`
    + logC1-txt
    &nbsp;

### 2.4. 指定した範囲の1文字にマッチ
+ 指定した範囲の1文字：`[`a`-`c`]`
&nbsp; 
+ 検索：`log[A-B]-txt`
    + `logA-txt`
    + logA0-txt
    + `logB-txt`
    + logB1-txt
    + `logC-txt`
    + logC1-txt
    + logD-txt
    + logD1-txt
    &nbsp;

### 2.5. 数字1文字にマッチ
+ 数字1文字：`\d`
&nbsp; 
+ 検索：`log\d-txt`
    + logA-txt
    + logB-txt
    + logC-txt
    + `log1-txt`
    + `log2-txt`
    + `log3-txt`
    + `log9-txt`
    &nbsp;

### 2.6. 英数字1文字にマッチ
+ 英数字1文字：`\w`
&nbsp; 
+ 検索：`log\w-txt`
    + `logA-txt`
    + `logB-txt`
    + `log1-txt`
    + `log2-txt`
    + logA1-txt
    + logB2-txt
    &nbsp;

### 2.7. スペース（スペース、タブ、改行）にマッチ
+ スペース（スペース、タブ、改行）：`\s`

### 2.8. タブにマッチ
+ タブ：`\t`

### 2.9. 改行（CR（16進数：0x0D、10進数：13））にマッチ
+ 改行（CR（16進数：0x0D、10進数：13））：`\r`

### 2.10. 改行（LF（16進数：0x0A、10進数：10））にマッチ
+ 改行（LF（16進数：0x0A、10進数：10））：`\n`

### 2.11. メタ文字のエスケープ
+ メタ文字：`. * + ? \ | ^ $ [ ] ( ) { } `
+ エスケープ文字：`\`
&nbsp; 
+ 検索：`log\.-txt`
    + logA-txt
    + logB-txt
    + log1-txt
    + log2-txt
    + `log.-txt`
    &nbsp;

### 2.12. どれかの単語にマッチ
+ どれかの単語：word1`|`word2
&nbsp; 
+ 検索：`logA-txt|tmpB-txt`
    + `logA-txt`
    + logB-txt
    + log1-txt
    + log2-txt
    + tmpA-txt
    + `tmpB-txt`
    + tmp1-txt
    + tmp2-txt
    &nbsp;

### 2.13. グループ化
+ グループ化：`()`
&nbsp; 
+ 検索：`(logA|tmpB)-txt`
    + `logA-txt`
    + logB-txt
    + log1-txt
    + log2-txt
    + tmpA-txt
    + `tmpB-txt`
    + tmp1-txt
    + tmp2-txt
    &nbsp;

### 2.14. 行の先頭にマッチ
+ 行の先頭：`^`
&nbsp; 
+ 検索：`^sample`
    + `sample`01
    + `sample`02
    + `sample`03
    + 01sample
    + 02sample
    + 03sample
    &nbsp;

### 2.15. 行の末尾にマッチ
+ 行の末尾：`$`
&nbsp; 
+ 検索：`sample$`
    + sample01
    + sample02
    + sample03
    + 01`sample`
    + 02`sample`
    + 03`sample`
    &nbsp;

### 2.16. 直前の文字の0回以上の繰り返しにマッチ
+ 直前の文字の0回以上の繰り返し：`*`
&nbsp; 
+ 検索：`loga*`
    + `log`
    + `loga`
    + `log`b
    + `logaaaa`
    + `log`bbbb
    &nbsp;
+ 検索：`".*"`
    + Server
    + `"WebServer"`
    + WebServer
    + `""`
    + `"DBServer"`
    + DBServer
    &nbsp;
+ 検索：`(DB)*Server`
    + `Server`
    + `DBServer`
    + `DBDBServer`
    + `DBDBDBServer`
    + `DBDBDBDBServer`
    + DBDDServer
    &nbsp;

### 2.17. 直前の文字の1回以上の繰り返しにマッチ
+ 直前の文字の0回以上の繰り返し：`+`
&nbsp; 
+ 検索：`loga+`
    + log
    + `loga`
    + logb
    + `logaaaa`
    + logbbbb
    &nbsp;
+ 検索：`".+"`
    + Server
    + `"WebServer"`
    + WebServer
    + ""
    + `"DBServer"`
    + DBServer
    &nbsp;
+ 検索：`(DB)+Server`
    + Server
    + `DBServer`
    + `DBDBServer`
    + `DBDBDBServer`
    + `DBDBDBDBServer`
    + DBDDServer
    &nbsp;

### 2.18. 直前の文字のn回の繰り返しにマッチ
+ 直前の文字のn回の繰り返し：`{n}`
&nbsp; 
+ 検索：`log\d{4}\.txt`
    + log1.txt
    + log12.txt
    + log123.txt
    + `log1234.txt`
    + log12345.txt
    &nbsp;

### 2.19. 直前の文字のn回以上の繰り返しにマッチ
+ 直前の文字のn回以上の繰り返し：`{n,}`
&nbsp; 
+ 検索：`log\d{4,}\.txt`
    + log1.txt
    + log12.txt
    + log123.txt
    + `log1234.txt`
    + `log12345.txt`
    &nbsp;

### 2.20. 直前の文字のm～n回の繰り返しにマッチ
+ 直前の文字のm～n回の繰り返し：`{m,n}`
&nbsp; 
+ 検索：`log\d{3,4}\.txt`
    + log1.txt
    + log12.txt
    + `log123.txt`
    + `log1234.txt`
    + log12345.txt
    &nbsp;

### 2.21. 直前の文字があってもなくてもマッチ
+ 直前の文字があってもなくてもマッチ：`?`
&nbsp; 
+ 検索：`https?`
    + `http`
    + `https`
    + ftp
    + ftps
    &nbsp;

### 2.22. 最短マッチ
+ 最短マッチ：`*?`
&nbsp; 
+ 検索：`<*?>`
    + `<h1>`見出し１`</h1>`
    + `<h2>`見出し２`</h2>`
    + `<h3>`見出し３（これは`<b>`見出し`</b>`です）`</h3>`
    &nbsp;
+ 検索：`<?>` &nbsp;&nbsp;&nbsp;&nbsp;<font color="red">※最短マッチを使用しない場合</font>
    + `<h1>見出し１</h1>`
    + `<h2>見出し２</h2>`
    + `<h3>見出し３（これは<b>見出し</b>です）</h3>`
    &nbsp;

### 2.23. マッチした部分をもう一度マッチ
+ `(ab)`でマッチしたものを`\1`の位置でもう一度マッチ：`(ab)\1`
&nbsp; 
+ 検索：`(\d{4})年にこの問題が起こりました。\1年記載`
    + 2023年にこの問題が起こりました。2025年記載
    + 2024年にこの問題が起こりました。2025年記載
    + `2025年にこの問題が起こりました。2025年記載`
    &nbsp;

### 2.24. 先読みマッチ
+ 後ろに`x`がついているときだけ、`m`でマッチする：`m(?=x)`
&nbsp; 
+ 検索：`\d+(?=年)`
    + 第40回
    + 令和`7`年
    + 西暦`2015`年
    + 500円
    &nbsp;

### 2.25. 後読みマッチ
+ 前に`x`がついているときだけ、`m`でマッチする：`(?<=x)m`
&nbsp; 
+ 検索：`(?<=西暦)\d+`
    + 第40回
    + 令和7年
    + 西暦`2015`年
    + 500円
    &nbsp;

### 2.26. 否定的先読みマッチ
+ 後ろに`x`以外がついているときだけ、`m`でマッチする：`m(?!x)`
&nbsp; 
+ 検索：`\d+(?!.*年)`
    + 第`40`回
    + 令和7年
    + 西暦`2015`年
    + `500`円
    &nbsp;

### 2.27. 否定的後読みマッチ
+ 前に`x`以外がついているときだけ、`m`でマッチする：`(?<!x)m`
&nbsp; 
+ 検索：`(?<!昭和)\d{2}`
    + 明治`20`年
    + 大正`10`年
    + 昭和60年
    + 平成`25`年
    + 令和`05`年
    &nbsp;

# 3. Replacement group reference（置換用キャプチャグループ参照）

置換用キャプチャグループ参照を使用すると、正規表現で`()`で囲って抽出した部分（キャプチャグループ）を、置換時に再利用することができます。

||`\1` または `S1`|
|:---:|:---|
|`\1` または `$1`|1番目のキャプチャ`()`を参照|
|`\2` または `$2`|2番目のキャプチャ`()`を参照|
|`\3` または `$3`|2番目のキャプチャ`()`を参照|
|～|～|
|`\0` または `$0`<br>サクラエディタでは`$&`|全体のマッチ|

使用例は以下の通りです。

```:置換前のテキスト
名前: 太郎, 年齢: 30
```

+ 検索（正規表現）：`名前: (.+), 年齢: (\d+)`
+ 置換：`$2歳の$1さん`

```:置換後のテキスト
30歳の太郎さん
```

---
以上