正規表現(RegEx) - クイックリファレンス

目次

基礎

どこでもマッチする:デフォルトでは、正規表現は検索される文字列内の任意の部分文字列にマッチします。例えば、正規表現abcは、abc123、123abc、123abcxyzのどれにもマッチします。最初か最後だけにマッチさせるは、アンカーを使います。

エスケープ文字:abc123のようなほとんどの文字は、正規表現の中で文字どおり使用することができます。しかし、\.*?+[{|()^$ の集合に含まれる文字は、リテラルとみなされるためには、その前にバックスラッシュが必要です。例えば、\.は、リテラルピリオドで、\\はリテラルバックスラッシュである。エスケープを回避するには、\Q...\Eを使用します。For example: \QLiteral Text\E.

大文字と小文字を区別する:デフォルトでは、正規表現は大文字と小文字を区別します。これは「i」オプションで変更できる。たとえば、i)abcというパターンは、大文字小文字を区別せずに「abc」を検索する。その他の修飾語については以下を参照のこと。

オプション(大文字と小文字を区別)

正規表現の冒頭で、以下のオプションを0個以上指定し、その後に閉じ括弧を付ける。例えばim)abcというパターンは、大文字小文字を区別せず、複数行のオプションをつけて「abc」を検索する(オプションがない場合は括弧を省略できる)。この構文は伝統に反するが、特別な区切り文字(スラッシュなど)を必要としないので、パターン内部でそのような区切り文字をエスケープする必要はない。さらに、オプションの解析が容易になるため、パフォーマンスが向上する。

オプション 説明
i 大文字小文字を区別しないマッチングで、AからZまでを小文字と同じものとして扱う。
m

Multiline。ヘイスタックを連続した1行としてではなく、(改行が含まれている場合は)個々の行の集まりとして表示する。具体的には以下のような変更である:

1)サーカムフレックス(^)は、すべての内部改行の直後にマッチし、常にマッチするヘイスタックの開始部分にもマッチする(ただし、Haystack最後の改行の後にはマッチしない)。

2)ドル記号($)は、Haystackの改行の前にマッチします(常にマッチする末尾にもマッチします)。

例えば、パターンm)^abc$はxyz`r`nabcにマッチする。しかし、「m」オプションがなければマッチしない。

「D」オプションは「m」があると無視される。

s DotAll。これにより、ピリオド(.)は改行を含むすべての文字にマッチするようになる(通常は改行にはマッチしない)。ただし、CRLF改行シーケンス(`r`n)にマッチさせるには、1つではなく2つのドットが必要である。このオプションに関係なく、[^a]のような否定クラスは常に改行にマッチする。
x パターン内の空白文字は、エスケープされているか文字クラス内にある場合を除き、無視される。`n と `t は PCRE に到達した時点で、すでに生の/リテラルな空白文字であるため無視されます(対照的に、 \n と\t は PCRE のエスケープシーケンスであるため無視されません)。「x」オプションは、文字クラス外のエスケープされていない「#」と次の改行文字の間の文字も無視する。これにより、複雑なパターンの中にコメントを入れることが可能になる。ただし、これはデータ文字にのみ適用され、条件付きサブパターンを開始する「(?(」、のような特殊文字列の中に空白が現れることはない。
A つまり、Haystackの先頭でのみマッチする。ほとんどの条件下では、これは「^」のような手段でパターンを明示的に固定することと同じである。
D Haystackの最後の項目が改行であっても、ドル記号($)を強制的にHaystackの最後にマッチさせる。このオプションがない場合、$は最後の改行の直前(改行がある場合)にマッチする。注:「m」オプションがある場合、このオプションは無視される。
J 名前付きサブパターンの重複を許可する。これは、同じ名前のサブパターンのコレクションのうち、1つだけがマッチするようなパターンに便利である。注:特定の名前の複数のインスタンスが何かにマッチした場合、一番左にあるものだけが保存される。また、変数名は大文字と小文字を区別しない。
U Ungreedy。量化子*?+および{min,max}は、マッチを形成するために絶対に必要な文字だけを消費し、残りの文字はパターンの次の部分に使用できるようにする。「U」オプションが有効でない場合、個々の量化詞の後にクエスチョンマークを付けることで、欲張らないようにすることができる。逆に「U」有効な場合、疑問符は個々の量化詞を貪欲にする。
X PCRE_EXTRA。Perlと互換性のないPCREの機能を有効にする。現在のところ、このような機能は、パターン中のバックスラッシュの後に特別な意味を持たない文字が続くと例外がスローされるということだけである。このオプションは、未使用のバックスラッシュ・シーケンスを将来の使用のために確保するのに役立つ。このオプションがない場合、バックスラッシュの後に特別な意味を持たない文字が続いても、リテラルとして扱われる(例えば、 \g と g は両方ともリテラル g として認識される)。このオプションに関係なく、特別な意味を持たない非アルファベットのバックスラッシュ シーケンスは常にリテラルとして扱われる(例:「\/」と「/」は両方ともフォワードスラッシュとして認識される)。
S パターンを研究し、その性能を向上させようとする。これは、特定のパターン(特に複雑なパターン)が何度も実行される場合に便利である。PCRE がパフォーマンスを向上させる方法を発見した場合、その発見はキャッシュにパターンと一緒に保存され、同じパターンの後続の実行で使用できるようになる(キャッシュでマッチを見つけるには、オプションの文字が順番も含めて正確にマッチする必要があるため、そのパターンの後続の使用でも S オプションを指定する必要がある)。
C 自動発信モードを有効にする。詳細は正規表現の吹き出しを参照。
`a

追加の改行マーカーを認識できるようにする。デフォルトでは、`r`n、`n と `r のみが認識される。このオプションを有効にすると、`v/VT/垂直タブ/chr(0xB)、`f/FF/formfeed/chr(0xC)、NEL/next-line/chr(0x85)、LS/line separator/chr(0x2028)、PS/paragraph separator/chr(0x2029) も認識される。

a、`n、`r オプションはアンカー(^ と $)ドット/ピリオドパターンの動作に影響する。

また、`aは(*BSR_UNICODE)を有効にしており、これにより \Rはどんな改行にもマッチするようになる。デフォルトで\Rは、`n、`r、`r`nにマッチする:`a)(*BSR_ANYCRLF)

`n 単独の改行(`n)を唯一の改行マーカーとして認識させる(上記参照)。
`r キャリッジリターン(`r)を唯一の改行マーカーとして認識させる(上記参照)。

注:各オプションと次のオプションを区切るために、オプションでスペースとタブを使用することができます。

よく使われる記号と構文

要素 説明
. デフォルトでは、ドットは `r(キャリッジリターン)または `n(ラインフィード)以外の任意の1文字にマッチするが、これはDotAll(s)ラインフィード(`n)キャリッジリターン(`r)、または`aオプションを使うことで変更できる。例えば、ab.abcabzab_にマッチする。
*

アスタリスクは、直前の文字、クラスサブパターンの0個以上にマッチする。例えば、a*abaaabにマッチする。また、「a 」をまったく含まない文字列の先頭にもマッチする。

ワイルドカード:ドットスターパターン.*は、0個以上の任意の文字(改行 `r と `n を除く)にマッチするため、最も寛容なパターンの1つである。例えば、abc.*123abcAnything123にもabc123にもマッチする。

? クエスチョンマークは、直前の文字、クラスサブパターンの0個または1個にマッチする。これは「前の項目はオプションである」と考えてほしい。例えば、colou?rは、「u」がオプションなので、colorcolourの両方にマッチする。
+ プラス記号は、直前の文字、クラスサブパターンの1つ以上にマッチする。例えばa+abとaaabにマッチする。しかし、a*a?とは異なり、a+パターンは「a」文字のない文字列の先頭ではマッチしない。
{min,max}

直前の文字、クラス、またはサブパターン最小出現回数から最大出現回数の間にマッチする。たとえば、a{1,2}abにマッチするが、aaabの最初の2つのaにしかマッチしない。

また、{3}はちょうど3回、{3,}は3回以上という意味である。注:指定された数値は65536以下でなければならず、最初の数値は2番目の数値以下でなければならない。

[...]

文字のクラス:角括弧は文字のリストまたは範囲(または両方)を囲む。例えば、[abc]は「a、b、cのいずれか1文字」を意味する。例えば、[a-z]は「小文字のaからzの間にある任意の1文字(含む)」を意味します。例えば、[a-zA-Z0-9_]は「英数字またはアンダースコアである任意の1文字」を意味する。

文字クラスは、*?+、または{min,max}に続くことができる。たとえば、[0-9]+は、任意の数字が1つ以上出現した場合にマッチする。したがって、xyz123にはマッチするが、abcxyzにはマッチしない。

The following POSIX named sets are also supported via the form [[:xxx:]], where xxx is one of the following words: alnum, alpha, ascii (0-127), blank (space or tab), cntrl (control character), digit (0-9), xdigit (hex digit), print, graph (print excluding space), punct, lower, upper, space (whitespace), word (same as \w).

文字クラス内では、クラス内で特別な意味を持つ場合を除いて文字をエスケープする必要はない、例:[\^a][a\-b][\a]][\\a]

[^...] クラスにない任意の1文字にマッチする。例えば、[^/]*は、http:// のような、フォワード・スラッシュでない文字が0個以上出現した場合にマッチする。同様に、[^0-9xyz]は、数字でなく、文字x、y、zでない一文字にマッチする。
\d 任意の1桁の数字にマッチする([0-9]クラスに相当)。逆に、大文字は、「数字以外のもの」を意味する。これと以下の2つはクラス内部でも使える。例えば、[\d.-]は「一桁の数字、ピリオド、マイナス記号」を意味する。
\s スペース、タブ、改行(`r と `n)を中心とした空白文字1文字にマッチする。逆に、大文字は「空白以外の文字」を意味する。
\w 英数字やアンダースコアなどの「単語」1文字にマッチする。これは[a-zA-Z0-9_]と等価である。逆に、大文字は「単語以外の文字」を意味する。
^
$

サーカムフレックス(^)とドル記号($)は、文字を消費しないのでアンカーと呼ばれる。

^ は、行の先頭でマッチすることを要求するために、パターンの先頭に現れることがある。例えば、^abcabc123にマッチするが、123abcにはマッチしない。

$ は、行の末尾でマッチすることを要求するために、パターンの末尾に表示することができる。例えば、abc$は123abcにマッチするが、abc123にはマッチしない。

2つのアンカーを組み合わせることもできる。例えば、^abc$abcはマッチする(つまり、その前後に他の文字があってはならない)。

検索対象のテキストが複数の行を含む場合、「m」オプションを使って、アンカーをテキスト全体ではなく各行に適用させることができる。例えば、m)^abc$は123`r`nabc`r`n789にマッチする。しかし、「m」オプションがなければマッチしない。

\b \b は「単語の境界」を意味し、文字を消費しないのでアンカーのようなものだ。現在の文字の単語文字(\w)としての状態が、前の文字と逆であることを要求する。これは通常、他の単語の中に現れる単語と誤ってマッチングするのを避けるために使われる。例えば、\bcat\bは、「catfish」にマッチしないが、catは、句読点や空白に関係なくマッチする。キャピタル\Bはその逆である:この場合、現在の文字が単語境界にないことが必要である。
| 縦棒は2つ以上の選択肢を区切る。選択肢のいずれかを満たせばマッチとなる。例えば、gray|greygraygreyの両方にマッチする。同様に、パターンgr(a|e)yは、以下に説明する括弧の助けを借りて同じことを行う。
(...)

括弧で囲まれた項目は、最も一般的に使用される:

  • 評価の順番を決める。例えば、(Sun|Mon|Tues|Wednes|Thurs|Fri|Satur)dayは、どの日の名前にもマッチする。
  • *?+{min,max}のいずれかをシリーズに適用する。たとえば、(abc)+は、文字列「abc」の1つ以上の出現にマッチする。したがって、abcabc123にはマッチするが、ab123やbc123にはマッチしない。
  • abc(.*)xyzのドットスターのようなサブパターンをキャプチャする。例えば、RegExMatchは各サブパターンにマッチする部分文字列を出力配列に格納する。同様に、RegExReplaceでは、各サブパターンにマッチする部分文字列を、$1のような後方参照を通じて結果に再挿入することができる。サブパターンを捕捉する副作用を伴わずに括弧を使用するには、括弧内の最初の2文字に?:を指定する:(?:.*)
  • オプションをその場で変更。例えば、(?im)は、パターン(またはサブパターン内で発生した場合はサブパターン)の残りの部分の大文字小文字を区別しないオプションと複数行オプションをオンにします。逆に、(?-im)は両方をオフにする。DPS`r`n`aを除くすべてのオプションがサポートされている。
\t
\r
その他

これらのエスケープシーケンスは特殊文字を表す。最も一般的なのは、\t(タブ)、\r(キャリッジリターン)、\n(ラインフィード)。AutoHotkeyでは、このような場合、バックスラッシュの代わりにアクセント記号(`)を使用することもできます。\xhh 形式のエスケープシーケンスもサポートしており、 hh は00からFFまでのANSI文字の16進コードである。

\R は、`r`n`n`rにマッチする(ただし、文字クラス内では単に「R」となる)。

\p{xx}
\P{xx}
\X

Unicode 文字のプロパティ。\p{xx}はxx プロパティを持つ文字にマッチしますが、\P{xx}は xx プロパティを持たない任意の文字にマッチします。例えば、\pLは任意の文字にマッチし、\p{Lu}は任意の大文字にマッチします。\Xは、Unicode シーケンスを形成する任意の数の文字にマッチします。

サポートされているプロパティ名の全リストとその他の詳細については、www.pcre.org/pcre.txtで「\p{xx}」を検索してください。

(*UCP)

性能上、\d、\D、\s、\S、\w、\W、\b および \Bは、デフォルトではASCII文字としてしか認識しません。パターンが(*UCP)で始まる場合、Unicodeプロパティがどの文字がマッチするかを決定するために使用されます。例えば \wは[\p{L}\p{N}_]と等価になり、\dは\p{Nd}と等価になる。

貪欲:デフォルトでは、*?+{min,max}は貪欲で、パターン全体を満たす最後の文字まですべての文字を消費する。その代わりに、可能性のある最初の文字で止めさせるには、その後にクエスチョンマークを付ける。例えば <.+>(クエスチョンマークがない)の意味:「<の後に任意の文字が1つ以上続き、その後に>が続くものを検索する」。このパターンが、<em>text</em>文字列全体にマッチしないようにするには、プラス記号にクエスチョンマークを追加する:<.+?>。これにより、マッチは最初の「>」で止まり、最初のタグ<em>にマッチする。

ルックアヘッドとルックビハインドのアサーション:グループ(?=...)(?!..)(?<=...)(?<!...)は、条件を満たすことを要求するが、文字を消費しないので、アサーションと呼ばれる。たとえば、abc(?=.*xyz)は、文字列xyzが文字列abcの右側のどこかに存在することを必要とするルックアヘッド・アサーションである(存在しない場合、パターン全体がマッチするとはみなされない)。(?=...)は、指定されたパターンが存在することを要求するため、のルックアヘッドと呼ばれる。逆に、(?!...)は、指定されたパターンが存在しないことを要求するため、のルックアヘッドとなる。同様に、(?<=...)(?<!...)は、それぞれ正と負のルックビハインドである。なぜなら、彼らは現在位置の右ではなくを見るからである。*?+のような大小さまざまな量化子をサポートしていないため、ルックアヘッドよりもルックビハインドは制限されている。エスケープシーケンス\Kは、マッチした最終文字列から前にマッチした文字が省略されるため、ルックビハインド・ アサーションに似ている。例えば、foo\Kbarは「foobar」にマッチするが、「bar」にマッチしたと報告する。

関連:正規表現はRegExMatchRegExReplaceSetTitleMatchModeでサポートされています。

最後に:このページでは、一般的に使用されるRegExの機能のほとんどに触れていますが、条件付きサブパターンなど、他にも調べたい機能がたくさんあります。PCREマニュアルの完全版はwww.pcre.org/pcre.txtにあります。