正規表現構文

EmEditor は、Perl の正規表現構文に基づいています。

リテラル

".", "|", "*", "?", "+", "(", ")", "{", "}", "[", "]", "^", "$", "|" および "\"を除くすべての文字はリテラルです。これらの文字は、"\"が前に付くとリテラルになります。例えば、"\?"の検索は文書内のすべての"?"に一致し、"hello"の検索は文書内のすべての"hello"に一致します。

メタ文字

次の表は、メタ文字の全リストと、正規表現におけるメタ文字の動作を示しています。

\

次に続く文字が特殊文字、リテラル、前方参照、または 8 進エスケープであることを示します。たとえば、"n" は文字 "n" と一致しますが、"\n" は改行文字と一致します。"\\" は "\" と、"\(" は "(" と一致します。

^

行の先頭と一致します。たとえば、"^e"は行頭の"e"と一致します。

$

行の末尾と一致します。たとえば、"e$"は行末の"e"と一致します。

*

直前の文字または部分式と 0 回以上一致します。たとえば、zo* は "z" と "zoo" のどちらにも一致します。* は {0,} と同じ意味です。

+

直前の文字または部分式と 1 回以上一致します。たとえば、'zo+' は "zo" や "zoo" とは一致しますが、"z" とは一致しません。+ は {1,} と同じ意味です。

?

直前の文字または部分式と 0 回または 1 回一致します。たとえば、"do(es)?" は "do" または "does" の "do" と一致します。? は {0,1} と同じ意味です。

{n}

n には、0 以上の整数を指定します。正確に n 回一致します。たとえば、'o{2}' は "Bob" の "o" とは一致しませんが、"food" の 2 つの "o" とは一致します。

{n,}

n には、0 以上の整数を指定します。少なくとも n 回一致します。たとえば、'o{2,}' は "Bob" の "o" とは一致しませんが、"foooood" のすべての "o" とは一致します。"o{1,}" は "o+" と同じ意味です。"o{0,}" は "o*" と同じ意味です。

{n,m}

m および n には 0 以上の整数を指定します。n は m 以下です。n ~ m 回一致します。たとえば、"o{1,3}" は "fooooood" の最初の 3 つの "o" と一致します。"o{0,1}" は "o?" と同じ意味です。カンマと数の間には空白を入れません。

?

ほかの量指定子 (*, +, ?, {n}, {n,}, {n,m}) の直後に指定すると、一致パターンが最短一致になります。既定のパターンでは、できるだけ多くの文字列と一致するのに比べて、最短一致パターンでは、できるだけ少ない文字列と一致します。たとえば、文字列 "oooo" に対して、'o+?' を指定すると 1 つの "o" と一致し、'o+' を指定するとすべての "o" と一致します。

.

任意の 1 文字に一致します。たとえば、".e"は、"he"、"we"、"me"のいずれかと一致します。 [正規表現「.」が改行コードに一致することができる] チェック ボックスがチェックされている場合、 [正規表現で検索する追加行数] テキスト ボックスで指定する行数の範囲内で、改行コードにも一致します。

(pattern)

()は、2つの目的があります: pattern を部分式にグループ化することと、一致した文字列を取得することです。たとえば"(ab)*"は"ababab"という文字列すべてに一致します。部分式は左から右の順に番号化された後方参照 (以下を参照) によって取得できます。かっこ ( ) と一致させるには、'\(' または '\)' を指定します。

(?pattern)

"pattern" で一致した文字列を "name" というグループに捕獲します。

\1 - \9

後方参照を示します。後方参照は、一致した部分式への参照です。参照は部分式が一致したものであり、表現そのものではありません。後方参照はエスケープ文字"\"とそれに続く数字"1"-"9"から成り立っています。後方参照は [検索] メニューの [置換] を選択したときに使います。正規表現を使ってテキスト パターンを見つけ、一致したテキストは指定した後方参照で置換されます。たとえば、"(h)(e)"は"he"を見つけ、[置換後の文字列] に入力した"\1"は"he"を"h"に変換し、"\2\1"は"he"を"eh"に変換します。

\k

名前付き後方参照を示します。名前付き後方参照は、以前に一致した (?expression) のフォームの捕獲式グループへの参照です。"name" が数字の場合、数字の後方参照を示し、\1, \2, \3, ... と等価です。

(?:pattern)

pattern と一致しても、その文字列が記憶されない部分式です。後方参照で使用できません。"または" を意味する (|) を使用して、パターンの一部を結合するときに便利です。たとえば、'industry|industries' と指定する代わりに、'industr(?:y|ies)' と指定する方が簡潔です。

(?=pattern)

肯定先読みを実行する部分式です。pattern に一致する文字列が始まる位置にある検索文字列と一致します。一致した文字列は記憶されず、後で使用することはできません。たとえば"x(?=abc)"は、abc が後に続く場合のみ"x"に一致します。pattern には改行コードを含めることはできません。

(?!pattern)

否定先読み検索を実行する部分式です。pattern に一致しない文字列が始まる位置にある検索文字列と一致します。一致した文字列は記憶されず、後で使用することはできません。たとえば"x(?!abc)"は、abc が後に続かない場合のみ"x"に一致します。pattern には改行コードを含めることはできません。

(?<=pattern)

肯定後読みを実行する部分式です。pattern に一致する文字列で終わる位置にある検索文字列と一致します。一致した文字列は記憶されず、後で使用することはできません。たとえば"(?<=abc)x"は、abc の後に続く場合のみ"x"に一致します。pattern には改行コードを含めることはできません。pattern は固定長である必要があります。

(?<!pattern)

否定後読み検索を実行する部分式です。pattern に一致しない文字列で終わる位置にある検索文字列と一致します。一致した文字列は記憶されず、後で使用することはできません。たとえば"(?<!abc)x"は、abc の後に続かない場合のみ"x"に一致します。pattern には改行コードを含めることはできません。pattern は固定長である必要があります。

x|y

x または y と一致します。たとえば、"z|food" は "z" または "food" と一致します。'(z|f)ood' は、"zood" または "food" に一致します。

[xyz]

文字セットを指定します。角かっこで囲まれた文字のいずれかに一致します。たとえば、'[abc]' は "plain" の 'a' と一致します。

[^xyz]

除外する文字セットを指定します。角かっこで囲まれた文字以外の文字に一致します。たとえば、'[^abc]' は "plain" の 'p' と一致します。

[a-z]

文字の範囲を指定します。指定した範囲に含まれる任意の文字に一致します。たとえば、'[a-z]' は小文字の英字 a ~ z の範囲にある任意の文字と一致します。

[^a-z]

否定の文字の範囲を指定します。指定した範囲に含まれていない任意の文字に一致します。たとえば、'[^a-z]' は小文字の英字 a ~ z の範囲外にある任意の文字と一致します。

文字クラス

次の文字クラスは、文字セットの中で、"[:classname:]" のように使用されます。例えば、"[[:space:]]" はすべての空白文字のセットを表します。

alnum

任意の言語上の文字と数字: アルファベット、音節文字、漢字が含まれます。

alpha

任意の言語上の文字: アルファベット、音節文字、漢字が含まれます。

blank

任意の空白文字、空白またはタブ。

cntrl

任意のコントロール文字。

digit

任意の数字 0-9。

graph

任意のグラフィック文字。

lower

任意の a-z、その他の小文字。

print

任意の表示できる文字。

punct

任意の句読点。

space

任意の空白文字。

upper

任意の A-Z、その他の大文字。

xdigit

任意の 16 進数文字 0-9、a-f、A-F。

word

任意の単語文字 (すべての alnum 文字と下線)。

unicode

文字コード値が 256 以上の任意の文字。(Regex.Boost のみ)

文字プロパティ

構文:

\p{property-name}

\P{property-name}  (否定)

\p{^property-name}  (否定)  (Onigmo のみ)

次の文字プロパティ名が使用できます。例えば、"\p{alnum}" は任意の英数字を表し、"\P{alnum}" はその否定形です。

alnum

任意の言語上の文字と数字: アルファベット、音節文字、漢字が含まれます。

alpha

任意の言語上の文字: アルファベット、音節文字、漢字が含まれます。

blank

任意の空白文字、空白またはタブ。

cntrl

任意のコントロール文字。

digit

任意の数字 0-9。

graph

任意のグラフィック文字。

lower

任意の a-z、その他の小文字。

print

任意の表示できる文字。

punct

任意の句読点。

space

任意の空白文字。

upper

任意の A-Z、その他の大文字。

xdigit

任意の 16 進数文字 0-9、a-f、A-F。

word

任意の単語文字 (すべての alnum 文字と下線)。

unicode

文字コード値が 256 以上の任意の文字。(Regex.Boost のみ)

ascii

ASCII 文字。(Onigmo のみ)

Hiragana

ひらがな。(Onigmo のみ)

Katakana

カタカナ。(Onigmo のみ)

Han

漢字。(Onigmo のみ)

Hangul

ハングル。(Onigmo のみ)

1 文字エスケープ シーケンス

次のエスケープ シーケンスは 1 文字のエイリアスです。

0x07

\a

0x07 ベル文字

0x0C

\f

0x0C フォーム フィード

0x0A

\n

0x0A 改行

0x0D

\r

0x0D 復帰

0x09

\t

0x09 タブ

0x0B

\v

0x0B 垂直タブ

0x1B

\e

0x1B エスケープ文字

0dd

\0dd

0dd 8 進数 (Boost.Regex のみ)

0xXX

\xXX

0xXX 16 進数 (Unicode)

0xXXXX

\x{XXXX}

0xXXXX 16 進数 (Unicode)

0xXXXXXXXX

\x{XXXXXXXX}

0xXXXXXXXX 16 進数 (Unicode)(Onigmo のみ)

0xXXXXXXXX

\uXXXX

0xXXXXXXXX 16 進数 (Unicode)(Onigmo のみ)

\cZ Z-'@'

\cZ Z-'@'

Ctrl-Z (Z は、'@'以下の任意の文字コード)

単語の区切り

次のエスケープ シーケンスは単語の区切りに一致します。

\<

単語の開始位置に一致します。(Boost.Regex のみ)

\>

単語の終了位置に一致します。(Boost.Regex のみ)

\b

単語の区切り (単語の開始または終了位置) に一致します。

\B

単語の区切りでないときに一致します。

エスケープ シーケンス

次のエスケープ シーケンスは、すべての文字クラスを表現するのに使われます。

\w

単語に使用される任意の文字と一致します。英数字とアンダースコアが含まれます。

\W

\w の補完です。

\s

空白、タブ、フォーム フィードなどの任意の空白文字と一致します。

\S

\s の補完です

\d

任意の数字 0 から 9 と一致します。

\D

\d の補完です。

\l

任意の小文字 a から z と一致します。

\L

\l の補完です。

\u

任意の大文字 A から Z と一致します。

\U

\u の補完です。

\C

任意の文字と一致します。'.'と同等です。

\Q

引用始まり演算子です。ここから引用終わり演算子"\E"までは、リテラルとして扱われます。

\E

引用終わり演算子です。\Q から始まるシーケンスを終了します。

置換表現

置換表現 を参照してください。

注意

  • [ファイルから検索] および [ファイルから置換] では、復帰 (\r) と改行 (\n) を厳密に分けて検索する必要があります。指定方法の違いについて、詳しくは、 改行コードの指定方法 をお読みください。

  • "\l"、"\u"とその補完のように、エスケープ シーケンスによっては、大文字と小文字を区別するがチェックされていることが必要です。

著作権表示

EmEditor の正規表現検索ルーチンは、Boost ライブラリの Regex++ 、および Onigmo を利用しています。

Copyright (C) Dr John Maddock

Copyright (C) K. Takata, based on Oniguruma Copyright (C) by K. Kosako.

参考