正規表現

検索モードで[正規表現]を選択することで、正規表現による検索となります。

この正規表現はScintillaの正規表現エンジンを使用しているため、基本的な文法はScintillaのそれに従う必要があります。

なおこの正規表現エンジンは改行文字にマッチしないため、検索は行ごとに行う必要がありますVer.6.0で、改行文字にもマッチする機能が追加されました。検索モードの[. matches newline]がそれです。

文字マッチ (Single-character matches)

メタ文字 マッチする文字
.  
\X  
 

非ASCII文字 (Non ASCII characters)

メタ文字 マッチする文字
\xnn コードnnで表現される文字。\x41が「A」にマッチするように基本的にASCIIコードで指定するが、文書のエンコードに依存する
\x{nnnn}  
\Onnn  
[[.collating sequence.]]  

Unicode

文書のエンコードがANSI以外ならば、\x{nnnn}の構文でUnicode (UTF-16) を用いてマッチさせられます。たとえば\x{3042}は、「あ」にマッチします。また2バイトに収まらない文字はサロゲートペアで指定します。たとえば「😀」はU+1F600ですが、これはサロゲートペアによる表現\x{D83D}\x{DE00}にマッチします。

制御文字 (Control characters)

  • \a … BEL
  • \b … BS
  • \e … ESC
  • \f … FF
  • \n … LR
  • \r … CR
  • \R … 任意の改行文字
  • \t … TAB
  • \Ccharacter

範囲または文字の種類 (Ranges or kinds of characters)

メタ文字 マッチする文字
[...] 指定の文字セット。たとえば[abc]は、a、bまたはc
[^...]  
[[:name:]] nameの指定に依存
\pshort name [[:name:]]と同じ。たとえば\pdは[[:d:]]に、\p{digit}は[[:digit:]]と同じ
\p{name}
\Pshort name [^[:name:]]と同じ。
\P{name}
\d 10進数値。[[:digit:]]と同じ
\D 10進数値以外の文字。[^[:digit]]と同じ
\l  
\L  
\u [[:uper:]]と同じ
\U  
\w 英数字。[[:word:]]と同じ
\W 英数字以外の文字
\s ホワイトスペース (\t、\n、\r、\f、\v)。[[:space:]]と同じ
\S ホワイトスペース以外の文字
\h  
\H  
\v  
\V  
[[=primary key=]]  

Notepad++ではUnicodeプロパティのスクリプトがサポートされないため、ひらがなやカタカナに\p{Hiragana}や\p{Katakana}でマッチさせられません。よって\x{nnnn}の構文を利用して、Unicodeブロックで指定します。

文字種 メタ文字
ひらがな [\x{3041}-\x{3096}]
カタカナ [\x{3041}-\x{3096}]
漢字 [々〇〻\x{3400}-\x{9FFF}\x{F900}-\x{FAFF}]|[\x{D840}-\x{D87F}][\x{DC00}-\x{DFFF}]

[[:name:]]

命名されている文字クラス全体にマッチします。

メタ文字 マッチする文字
[[:alnum:]] ASCII letters and digits
[[:alpha:]] ASCII letters
[[:blank:]] spacing which is not a line terminator
[[:cntrl:]] control characters
[[:digit:]] 10進数値 (decimal digits)
[[:d:]]
[[:graph:]] graphical character
[[:lower:]] lowercase letters
[[:l:]]
[[:print:]] printable characters
[[:punct:]] punctuation characters: , " ' ? ! ; : # $ % & ( ) * + - / < > = @ [ ] \ ^ _ { } | ~
[[:space:]] whitespace
[[:s:]]
[[:upper:]] uppercase letters
[[:u:]]
[[:unicode:]] any character with code point above 255
[[:word:]] word character
[[:w:]]
[[:xdigit:]] hexadecimal digits

複合的な演算子 (Multiplying operators)

量指定子
メタ文字 マッチする文字
+ 直前に指定されている1つ以上の文字
*  
?  
*?  
+?  
{n} n文字
{n,} n文字以上の文字
{m,n}  
{n,}?, {m,n}?  
*+, ?+, ++, {n,}+, {m,n}+  

アンカー (Anchors)

アンカーは、行の位置にマッチします。

メタ文字 マッチする文字
^ 行頭 (文字セット内で使用される場合を除く)
$ 行末
\< (Scintillaで定義されている) 単語の先頭
\> (Scintillaで定義されている) 単語の末尾
\b 単語の先頭または末尾
\B 単語の境界以外 (\bではない位置)
\A, \' マッチした文字列の先頭
\z, \` マッチした文字列の末尾
\Z  

アンカーで検索し、位置にだけマッチしたときには「zero length match」とツールチップで表示されます。

ファイルの先頭または末尾への追加

[. matches newline]を有効にし、キャレットをファイルの先頭に置いた状態で^.*$で検索すると、ファイル全体にマッチさせられます。このことから、

  • 検索文字列 … ^.*$
  • 置換文字列 … ABC$&

として置換するとファイルの先頭にABCの文字列を追加でき、$&ABCとすれば末尾に追加できます。

そのとき改行を含んだ文字列を追加するならば、置換文字列とする文字列の\r\nを、\\r\\nに置換した上で指定します。

グループ (Groups)

メタ文字 マッチする文字
(...)  
(?<some name>...), (?'some name'...), (?(some name)...)  
\gn , \g{n}  
\g{something}, \k<something>  
\digit  

可読性の向上 (Readability enhancements)

正規表現を読みやすくするために用います。

メタ文字 機能
(:...) グループ化するだけ
(?#...) コメント

検索修飾子 (Search modifiers)

メタ文字 機能
\Q  
\E  
(?:flags-not-flags ...), (?:flags-not-flags:...) フラグを適用する
  • i … 大文字/小文字を区別しない (既定では区別する)
  • m … ^と$を改行文字にマッチさせる (既定では". matches newline"に従う)
    (複数行モード)
  • s … 「.」を改行文字にマッチさせる (既定では". matches newline"に従う)
    (単一行モード)
  • x … 正規表現内のアンエスケープされた空白文字を無視する
(?|expression using the alternation | operator)  

制御構造 (Control flow)

メタ文字 マッチする文字
|  
(?n), (?signed-n)  
(?0), (?R)  
(?&name)  
(?assertionyes-pattern|no-pattern)  

表明 (Assertions)

メタ文字 マッチする文字
\K  
(?=pattern) patternが右側にある (肯定の先読み)
(?!pattern) patternが右側にない (否定の先読み)
(?<=pattern) patternが左側にある (肯定の後読み)
(?<pattern) patternが左側にない (否定の後読み)
(?>pattern) pattern

代用 (Substitutions)

メタ文字 意味
\a, \e, \f, \n, \r, \t, \v それぞれ次の制御文字。BEL、ESC、FF、LF、CR、TAB、VT
\l  
\L  
\u  
\U  
\E  
$&, $MATCH, ${^MATCH} マッチしたテキスト全体
$`, $PREMATCH, ${^PREMATCH}  
$", $POSTMATCH, ${$POSTMATCH}  
$^N, $LAST_SUBMATCH_RESULT 最後にマッチした部分式のテキストを返す
$+, $LAST_PAREN_MATCH パターンの最後の部分式にマッチしたテキストを返す
$$ $を返す
$n, ${n}, \n n番目にマッチした部分式を返す (後方参照)

nは、1~9の数値

置換ではいずれの形式でも可能だが、検索では\nのみ

$+{name} nameと名付けられた部分式を返す