サクラエディタ　コマンド/正規表現メモ

# ショートカット

| アクション | コマンド |
|:-:|:-:|
| 行複製  |  Ctrl + I |
|  行削除 |  Ctrl + E |

# 正規表現
### いずれかの一文字を検索。[]
```.js
[青紫黄]色
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/aca4a91f-7a75-856b-86ed-e1aabbf54a82.png)

### いずれかの一文字以外を検索。[^文字]
```.js
1[^A-z0-9]3
```
「123」は対象外、「1あ3」は対象となる。
`[ ]`内では`¥`と`]`以外のメタ文字は普通の文字として扱われる。
ただし、以下２つのメタ文字は`[ ]`内で意味を持つため誤検索に注意。
`^`を普通の文字として扱うなら後続に文字が存在しないこと、またはエスケープする。
`-`を普通の文字として扱うなら前方に文字が存在しないこと、またはエスケープする。

### いずれかの文字列を検索。()
```.js
(青紫|黄)色
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/f2e0b91e-ad20-597b-d613-37baa096359f.png)


### 先頭から任意の単語まで

```.js
^.*あ
```

### 先頭から任意の一文字目の単語まで。?で最短一致

```.js
^.*?あ
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/6b721748-df0d-f8db-5da8-fb66aed94e6f.png)
`^(.*?あ){2}`のようにすれば 2番目までを選択できる。最短一致を2回繰り返す

### 先頭から任意文字の直前まで
```.js
^.*(?=あ)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/a90fb8b5-bdf1-ef3c-17a5-361945d4ac51.png)
注意点：先頭行でヒットした場合、例えば1行が「あい」のみの時、`^.*(?=あ)`で検索すると先頭の「あ」も黄色くなるが、対象は「あ」の直前の「＾」である。置換を行うと行頭に置換文字が挿入される。
「＾」だけでも検索すると先頭文字全て黄色くなるが、置換を行うと行頭に挿入となる。
**サクラでは「＾」と「＾あ」は同じ箇所が黄色くなる仕様。**
先頭からではない任意文字の直前までなら`.(?=あ)`でよい。


### 先頭から任意の一文字目の直前まで。?で最短一致
```.js
^.*?(?=あ)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/2ac243f1-1f15-1a9e-21a4-d6e5b0129b36.png)
3行目のsが含まれてしまっているように見えるがサクラの仕様。[注意点](#先頭から任意文字の直前まで)参照

### 任意文字列の前方文字。(?=)肯定先読み
先読み系は検索文字列に条件を与えて、検索文字列内の前方一部分のみを置換したいときに使える。

:::note info
意味
・肯定　先読み＝マッチしたいワードを設定し、前方部分が置換対象
・否定　後読み＝マッチしたくないワードを設定し、後方部分が置換対象
:::

```.js
青紫(?=色) //色の直前にある青紫が対象
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/5d3c0b8d-a040-b27e-1ee5-46b1be79b5a8.png)

```.js
(?=青紫色)青紫 //青紫色の先頭から青紫 ⇒ (?=検索したい文字列の先頭を条件指定)検索する文字列
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/daf45294-3e0c-f551-d4fc-a4ad08f8b846.png)

### 任意文字列の後方文字。(?<=)肯定後読み
肯定先読みの後方版。

```.js
(?<=青紫)色 //青紫の直後にある色が対象
```


### 任意文字列以外の前方文字。(?!)否定先読み
```.js
青紫(?!色) //青紫の直後に色がないこと
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/396af2ed-0f77-4c52-c491-619f1701b7a8.png)

```.js
(?!青紫色)青紫 //青紫色以外の青紫
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/63a3ca99-f3ca-40ab-4ad7-a209af727b63.png)

### 任意文字列以外の前方文字。(?<!)否定後読み
否定先読み前方版。
例えば\r\nと\nが存在し\nのみ削除したい場合は、`(?<!\r)\n`となる。

```.js
(?<!青紫)色 //色の直前に青紫がないこと
```


### 行に対して検索かつマイナス検索をする
行(^.*$)に対して否定先読みを利用することで可能
※検索とマイナス検索両方に当てハマる場合は、否定先読みでマイナス検索を先に実行しているので、検索にはヒットしない。
```.js
^(?!.*マイナスA).*$  //"マイナスA"を行に含まない行を検索。（先頭^の直後に文字列.*マイナスAを含まない行.*$を検索している）
^(?!.*マイナスA).*あ.*$  //"マイナスA"を行に含まない、かつ、"あ"を含む行を検索
^(?!.*(マイナスA|マイナスB)).*(あ|い).*$  //ワード複数指定なら（）を使えばいい、正規表現込みワードや長ワードも（）使うと見易くなる
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/a5f4f8f9-5d3f-04be-fe99-acf8cbfbdb65.png)


### 変数利用置換
()で囲んだ部分を$1に置き換えれる

```.js
(a.*b)x
```
前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/47f53ee6-ec94-7ca2-84f1-ddf688e26db2.png)
後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/02b42f11-83d4-36e2-9459-3204ef6d4ae2.png)


### 前後入替置換
2つ目の()で囲んだ部分を$2に置き換えれる

```.js
(a.*z):(b.*x)
```
前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/dfdebca4-2ea4-7023-e363-7ff0eed5e9e4.png)
後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384409/f615a7ea-11cd-e92f-f6b9-ea6126c7d604.png)