サクラエディタで使える正規表現のメモ

# サクラエディタで使える正規表現のメモ
・限りなく個人用メモです。
・自分がサクラエディタで良く使っている正規表現一覧ですので、かなり偏りがあります。
・ネットワークエンジニアがログやconfigを見る時に便利です。
・自分は、サクラエディタの[タイプ別設定]>>[正規表現キーワード]へ登録したりして使ってます。
・自己のPCへ本ページをテキスト保存して利用することを想定しているため、コピーし易いようコードブロックで書いてます。

__更新メモ__

+ 2021/10/03, 間違いを修正、プライベートIPアドレスのClass-Bで第2オクテット指定が間違っていたので修正。第2オクテットを「16～31」指定にしました。`修正後: (^|\s)(172)\.(1[6-9]|2[0-9]|3[0-1])\.\d{1,3}\.\d{1,3}`
+ 2021/04/18, [サクラエディタのキーマクロ組み立て用コマンド一覧](#サクラエディタのキーマクロ組み立て用コマンド一覧)、挿入や整形のコマンドを追加。検索と置換を修正。
+ 2021/04/18, [参考URL](https://qiita.com/toyokky/items/881e1d55a4a11969ebf3#%E5%8F%82%E8%80%83url)、いただいたコメントを参考にサクラエディタWikiのURLを追加。


## 正規表現
[サクラエディタで利用可能な正規表現](http://sakura-editor.sourceforge.net/htmlhelp/HLP000089.html)

※サクラエディタは「マルチラインモード」のため、複数行に渡る正規表現は使用できない。


```python
## メタ文字、基本要素
「メタ文字」とは、特殊な意味や機能をもつ文字の事です。

\            ;#退避修飾(エスケープ)、直後のメタ文字をエスケープする。
|            ;#or、「|」の左右の文字列のいずれか。
(...)        ;#式集合(グループ化)。
[...]        ;#文字集合(文字クラス)。


## 文字集合(キャラクタクラス)
[ABC]        ;#AかBかCのどれかにマッチ。
[^ABC]       ;#not、否定、ABC以外の一文字にマッチ。
[a-z]        ;#aからzまでの文字のどれか1つとマッチ。


## 量指定子
メタ文字の一種である「量指定子」は、直前のパターンの繰り返し(連続)を表すための表現です。

### 最長一致、最大一致、欲張り
*          ;#直前のパターンの0回以上の繰り返し(.*は改行も含む)。
+          ;#直前のパターンの1回以上の繰り返し(.+は改行を含まない)。
?          ;#直前のパターンの0回か1回の出現。
{N}        ;#直前のパターンのN回の繰り返し。
{min,}     ;#直前のパターンのmin回以上の繰り返し。
{,max}     ;#直前のパターンのmax回以下の繰り返し。
{min,max}  ;#直前のパターンのmin回からmax回の繰り返し。
●.*●     ;#最長一致：最初の●から最後の●まで。


### 最短一致、最小一致、無欲
*?         ;#直前のパターンの0回以上の繰り返し。
+?         ;#直前のパターンの1回以上の繰り返し。
??         ;#直前のパターンの0回か1回の出現。
-          ;#直前のパターンのN回の繰り返し。
{min,}?    ;#直前のパターンのmin回以上の繰り返し。
{,max}?    ;#直前のパターンのmax回以下の繰り返し。
{min,max}? ;#直前のパターンのmin回からmax回の繰り返し。
●.*?●    ;#最短一致：最初の●から次の●まで／3個目の●から4個目の●まで。
^.*?(●)   ;#行頭から最初にヒットした●までを選択


## 文字
\t    ;#タブ、水平タブコード(HT,TAB)。
\n    ;#改行コード(Carriage Return)※UNIX系全般。
\r    ;#改行コード(Line Feed)※Mac OS(9以前)。
\n\r  ;#改行コード(CRLF)※Windows系全般。
\R    ;#すべての改行コード(「\n|\r|\n\r」と同義)。
[\b]  ;#後退空白／バックスペース(BS)。
\f    ;#フォームフィード／改ページ(FF)。
\a    ;#ベル文字、鐘／アラーム(BEL)。
\e    ;#退避修飾／エスケープコード(ESC) 。
\v    ;#垂直タブ(VT: Vertical Tab)と呼ばれる改行コード。
\c●  ;#Ctrl + ●


## 文字種
.     ;#改行を除く任意の1文字。
\w    ;#単語の構成文字。[a-zA-Z0-9_]と同義。
\W    ;#単語の構成文字以外。[^a-zA-Z0-9_]と同義。
\s    ;#空白文字(半角スペース、\t、\n、\r、\f)すべての文字。 [ \t\v\x0a\x0d]と同義
\S    ;#空白文字以外のすべての文字
\d    ;#10進数字。[0-9]と同義。
\D    ;#10進数字以外。[^0-9]と同義。
\l    ;#すべての半角英小文字のうち１文字。
\L    ;#すべての半角英小文字の以外の文字１文字(英大文字、数字、全角文字など含む)。
\u    ;#すべての半角英大文字のうち１文字。
\U    ;#すべての半角英大文字以外の１文字(英小文字、数字、全角文字など含む)。
\0    ;#NULL文字。

\p{Hiragana} ;#ひらがな(Unicodeプロパティ)
\p{Katakana} ;#カタカナ(Unicodeプロパティ)
\p{Han}      ;#漢字(Unicodeプロパティ)


## 位置(錨)
文字自体ではなく、「位置」を表現するもの
^   ;#行頭。
$   ;#行末。
\b  ;#単語の境界※[]の中ではバックスペースになる。
\B  ;#単語の境界以外。
\A  ;#文字列の最初。
\Z  ;#文字列の最後(最後が改行ならば改行の直前)。
\z  ;#文字列の最後。
\G  ;#照合開始位置。


## 先読み・後読みの言明(Assertion)表現

(?=●●●)          ;#肯定先読み。前方の文字列が●●●に一致するとき、その位置にマッチ。
(?<=●●●)         ;#肯定後読み。後方の文字列が●●●に一致するとき、その位置にマッチ。
(?!●●●)          ;#否定先読み。前方の文字列が●●●に一致しないとき、その位置にマッチ。
(?<!●●●)         ;#否定後読み。後方の文字列が●●●に一致しないとき、その位置にマッチ。
^(?!●●●).*$      ;#●●●で開始しない文字列。
^.*(?<!●●●)$     ;#●●●で終了しない文字列。
^(?!.*●●●).*$    ;#●●●を含まない文字列。
(?<=\【).*?(?=\】)  ;#【  】の中身だけをマッチする正規表現。


### 範囲・文字集合(キャラクタクラス)
[ABC]       ;#AかBかCのどれかにマッチ。
[^ABC]      ;#否定。AとBとC以外の任意の1文字にマッチ。
[A-Z]       ;#AからZまでの英大文字のどれか1つとマッチ。
[a-z]       ;#aからzまでの英小文字のどれか1つとマッチ。
[0-9]       ;#0から9までの数字のどれか1つとマッチ。
[0-9a-zA-Z] ;#範囲の組み合わせ。
[ぁ-ん]     ;#ひらがな。
[ァ-ン]     ;#カタカナ。
[０-９]     ;#全角数字。
[亜-熙]     ;#漢字。
```


## 応用編

```python
[^!"#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]+
  ";#記号以外の文字列

[\x00-\x7F]
  ;#ASCII文字(半角文字)

[^\x00-\x7F]
  ;#全角文字

(?<=[^0-9])([1-9]|[1-9][0-9])(?=[^0-9])
  ;#1以上、99以下の2桁の数字

(?<=[^0-9])([3-9]|1[0-2])(?=[^0-9])
  ;#3以上, 12以下の2桁の数字

(?<=[^0-9])(3[3-9]|[4-9][0-9])(?=[^0-9])
  ;#33以上, 99以下の2桁の数字

(?<=[^0-9])([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])(?=[^0-9])
  ;#1以上, 254以下の数字


### アドレス系
(?<=[0-9]\s)255\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=[\s$])
  ;#SubnetMask(数字型)※Maskの前が数字+半角空白の場合にヒットする。
  check ○: 192.168.0.0 255.255.255.0
  check ×: 192.168.0.X 255.255.255.0

(?<=[0-9])(/([0-9]|[1-2][0-9]|3[0-2]))(?=[\s$])
  ;#SubnetMask(／型)※/の前が数字の場合にヒットする。
  check ○: 192.168.0.0/24
  check ×: 192.168.0.0 /24

(?<=[0-9]\s)0\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=[\s$])
  ;#Wildcard(数字型)※Wildcardの前が数字+半角空白の場合にヒットする。
  check ○: 192.168.0.0 0.0.255.255
  check ×: 192.168.0.* 0.0.255.255

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
  ;#IPアドレス(簡易)

(?<=^|\s)([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.\d{1,3}\.\d{1,3}\.\d{1,3}(?= |/)
  ;#IPアドレス(行頭か半角空白から始まり、半角空白か/で終わる)※第一オクテットが0や255等は除く。
  check ○: 192.168.0.254 255.255.255.0
  check ○: 192.168.0.254/24
  check ×: 192.168.0.254255.255.255.0
  check ×: 192.168.0.254mask24

(^|\s)(10)\.\d{1,3}\.\d{1,3}\.\d{1,3}
(^|\s)(172)\.(1[6-9]|2[0-9]|3[0-1])\.\d{1,3}\.\d{1,3}
(^|\s)(192)\.168\.\d{1,3}\.\d{1,3}
  ;#プライベートIPアドレス

(?<=^|\s)[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.(0)(?=( 255.255.255.0)|(\/24))
(?<=^|\s)[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.(0|128)(?=( 255.255.255.128)|(\/25))
(?<=^|\s)[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.(0|64|128|192)(?=( 255.255.255.192)|(\/26))
(?<=^|\s)[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.(0|32|64|96|128|160|192|224)(?=( 255.255.255.224)|(\/27))
(?<=^|\s)[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.(0|16|32|48|64|80|96|112|128|144|160|176|192|208|224|240)(?=( 255.255.255.240)|(\/28))
(?<=^|\s)[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.(0|8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248)(?=( 255.255.255.248)|(\/29))
  ;#ネットワークアドレス※肯定先読みを使用し、MASKの値から、先方のアドレスがネットワークアドレスの時にヒットする。
  check ○: 192.168.0.16/28
  check ○: 192.168.0.16 255.255.255.240
  check ×: 192.168.0.16/27
  check ×: 192.168.0.16 255.255.255.224

(?<=^|\s)[0-9a-fA-F]{2}([\.:-])?[0-9a-fA-F]{2}([\.:-])[0-9a-fA-F]{2}([\.:-])?[0-9a-fA-F]{2}([\.:-])[0-9a-fA-F]{2}([\.:-])?[0-9a-fA-F]{2}(?=[\s$])
  ;#macアドレス
  check ○: E8-2A-44-DB-AF-5B
  check ○: E82A:44DB:AF5B
  check ○: e8:2a:44:db:af:5b
  check ×: e8:2a_44db_af5b

### クリッカブルURL
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  ;#Emailアドレス

http(s)?:\/\/[^\*\?\<\>\|\r\n]+
  ;#インターネットURL(簡易)※使用不可文字を省いているだけ、空白や日本語OK
  check ○: https://www.amazon.co.jp/
  check ○: https://www.amazon.co.jp/てすと 頁/test page:8080/

[A-Z]:\\[^\*\?\<\>\|\r\n]+
  ;#ドライブパス(使用不可文字だけ否定)

\\\\[^\*\?\<\>\|\r\n]+
  ;#ネットワークドライブパス(使用不可文字だけ否定)
```


<br>

## サクラエディタのキーマクロ組み立て用コマンド一覧

※（）内はサクラエディタでのショートカット

```python
## カーソル移動
S_Up(0);	// カーソル上移動（↑）
S_Down(0);	// カーソル下移動（↓）
S_Left(0);	// カーソル左移動（←）
S_Right(0);	// カーソル右移動（→）

S_WordLeft(0);	// 単語の左端に移動（Ctrl + ←）
S_WordRight(0);	// 単語の右端に移動（Ctrl + →）

S_PageUp(63);	// １ページアップ（PgUp）
S_PageDown(63);	// １ページダウン（PgDn）
S_GoLineTop(0);	// 行頭に移動(折り返し単位)（Home）
S_GoLineEnd(0);	// 行末に移動(折り返し単位)（End）

S_HalfPageUp(32);	// 半ページアップ（Ctrl + PgUp）
S_HalfPageDown(32);	// 半ページダウン（Ctrl + PgDn）
S_GoFileTop(0);	// ファイルの先頭に移動（Ctrl + Home）
S_GoFileEnd(0);	// ファイルの最後に移動（Ctrl + End）

## 選択
S_PageUp_Sel(63);	// (選択)１ページアップ（Shift + PgUp）
S_PageDown_Sel(63);	// (選択)１ページダウン（Shift + PgDn）
S_GoLineTop_Sel(0);	// (選択)行頭に移動(折り返し単位)（Shift + Home）
S_GoLineEnd_Sel(0);	// (選択)行末に移動(折り返し単位)（Shift + End）

S_HalfPageUp_Sel(32);	// (選択)半ページアップ（Ctrl + Shift + PgUp）
S_HalfPageDown_Sel(32);	// (選択)半ページダウン（Ctrl + Shift + PgDn）
S_GoFileTop_Sel(0);	// (選択)ファイルの先頭に移動（Ctrl + Shift + Home）
S_GoFileEnd_Sel(0);	// (選択)ファイルの最後に移動（Ctrl + Shift + End）

S_SelectAll(0);	// すべて選択（Ctrl + A）

## 編集 > 挿入
S_InsertDate(0);	// 日付挿入（Alt + ;）
S_InsertTime(0);	// 時刻挿入（Alt + :）

## 編集 > 整形
S_SortAsc(0);	// 選択行の昇順ソート（Alt + A）
S_SortDesc(0);	// 選択行の降順ソート（Alt + D）
S_Merge(0);	// 連続した重複行の削除(uniq)（Alt + M）
S_LTrim(0);	// 左(先頭)の空白を削除（Alt + L）
S_RTrim(0);	// 右(末尾)の空白を削除（Alt + R）

## その他キー操作
S_Copy(0);	// コピー  （Ctrl + C）
S_Cut(0);	// 切り取り（Ctrl + X）
S_Paste(0);	// 貼り付け（Ctrl + V）

S_Undo(0);	// 元に戻す（Ctrl + Z）
S_Redo(0);	// やり直し（Ctrl + Y）

S_Char(13);	// 文字入力（Enter）
S_IndentTab(0);	// TABインデント（TAB）

S_Delete(0);	// 削除（Delete）

## 検索
S_SearchNext('「検索文字」', 24);	// 次を検索（Ctrl + F）
S_SearchPrev('「検索文字」', 24);	// 前を検索（Ctrl + F）

S_SearchNext('「検索文字」', 28);	// 次を検索[正規表現あり]（Ctrl + F）
S_SearchPrev('「検索文字」', 28);	// 前を検索[正規表現あり]（Ctrl + F）

## 置換
S_Replace('「検索文字」', '「置換後文字」', 24);	// 置換（Ctrl + R）
S_ReDraw(0);	// 再描画 ※置換の次行へ以下の再描画を入れる
S_ReplaceAll('「検索文字」', '「置換後文字」', 24);	// すべて置換（Ctrl + R）
S_ReDraw(0);	// 再描画 ※置換の次行へ以下の再描画を入れる

S_Replace('「検索文字」', '「置換後文字」', 28);	// 置換[正規表現あり]（Ctrl + R）
S_ReDraw(0);	// 再描画 ※置換の次行へ以下の再描画を入れる
S_ReplaceAll('「検索文字」', '「置換後文字」', 28);	// すべて置換[正規表現あり]（Ctrl + R）
S_ReDraw(0);	// 再描画 ※置換の次行へ以下の再描画を入れる

## その他
Sleep(1000);	//指定時間（ミリ秒）待つ
```

## 参考URL

[サクラエディタWiki：正規表現](http://sakura.qp.land.to/?%C0%B5%B5%AC%C9%BD%B8%BD)
[サクラエディタWiki：正規表現/投稿※サンプル正規表現](http://sakura.qp.land.to/?%C0%B5%B5%AC%C9%BD%B8%BD%2F%C5%EA%B9%C6)
[](https://ja.osdn.net/projects/sakura-editor/forums/34071/41994/)