備忘録的プログラミングリファレンス

基本的な正規表現の使い方

 以下は、基本的な正規表現の使い方を並べています。

ページ内 Index

任意の文字 「.」

 .は任意の1文字があることを示します。

a.c
 以下がマッチします。緑の部分が「.」にマッチする部分です。
abc acc aac

 複数の文字があることを比較するには「.」を文字分だけ並べます。

a...c
 以下がマッチします。
abbbc aabcc aaaac

任意の文字 「*」

 直前の文字が0回以上繰り返していれば一致します。最長一致。

ab*c
 以下がマッチします。
ac abc abbbbbbbbbbbbbc

任意の文字 「+」

 直前の文字が1回以上繰り返していれば一致します。最長一致。

ab+c
 以下がマッチします。「*」と比べると、acはマッチしません。
abc abbbbbbbbbbbbbc

任意の文字 「?」

 直前の文字が0回または1回あれば一致します。最長一致。

ab?c
 以下がマッチします。「*」と比べると、acはマッチしますが複数の文字はマッチしません。
ac abc

任意の文字列 「.」と「*」,「+」、「?」

「.*」

 「*」に「.」を直前に付けて「.*」とすると、0コ以上の文字列の比較になります。最長一致です。

a.*c
 以下がマッチします。
ac abc abbbbbbbbbbbbbc aabcabcabcc

「.+」

 「+」に「.」を直前に付けて「.+」とすると、1コ以上の文字列の比較になります。最長一致です。

a.+c
 以下がマッチします。「.*」と比べると、acはマッチしません。
abc abbbbbbbbbbbbbc aabcabcabcc

「.?」

 「?」に「.」を直前に付けて「.?」とすると、任意の文字が0または1コの比較になります。最長一致です。

a.?c
 以下がマッチします。「.*」と比べると、acはマッチしますが複数の文字はマッチしません。
ac abc 

最長一致、最短一致

 言語によってデフォルトで最長一致か、最短一致があります。
 最長一致は一致する限りの文字列を対象にします。最短一致は初めに一致する文字列までを対象にします。

最長一致 (<.+>)		<p>abcdefghijk</p1> -> <p>abcdefghijk</p1>
最短一致 (<.+?>)	<p>abcdefghijk</p1> -> <p>

最短一致 「?」と「*」,「+」、「?」

「.*?」

 「.*」に「?」を付けると最短一致になります。この正規表現の直後にある文字までを対象に比較します。 「*?」といった使い方もできますが、ここでは任意の文字列ということにしたいので「.*?」を表します。

a.*?c
 以下の緑の部分は「.*?」にマッチする部分です。赤で囲った部分が「a.*?c」の正規表現にマッチする部分です。
ac aabcabcabcc acabcabcc

「.+?」

 「.+」に「?」を付けると最短一致になります。この正規表現の直後にある文字までを対象に比較します。 「+?」といった使い方もできますが、ここでは任意の文字列ということにしたいので「.+?」を表します。

a.+?c
 以下の部分がマッチします。「.*?」と比べると、ac...はマッチしません。
aabcabcabcc

「.??」

 「.?」に「?」を付けると最短一致になります。この正規表現の直後にある文字までを対象に比較します。 「??」といった使い方もできますが、ここでは任意の文字列ということにしたいので「.??」を表します。

a.??c
 以下の部分がマッチします。「.*?」と比べると、acの間の複数の文字はマッチしません。
ac aacabcabcc

行頭または行末からパターンを比較 「^」、「$」

行頭からパターンを比較 「^」

^abc
 以下の部分がマッチします。
abcdefghijklmnopqrstuvwxyz

行末からパターンを比較 「$」

xyz$
 以下の部分がマッチします。
abcdefghijklmnopqrstuvwxyz

OR条件 「|」

abc|def|ghi
 以下がマッチします。
abc def ghi

キャプチャ 「( )」

 正規表現の「( )」には、キャプチャというマッチした文字列を一時保存する機能があります。 さらにキャプチャ「( )」は、カッコ内に複雑なパターン条件を設定することができます。
 このキャプチャ「( )」は複数扱うことができ、データとして取り出す際には多くの場合番号で参照します。

abc(.*?)ghi
 以下がマッチし、(.*?)に該当する部分は後で取り出すことができます。
abcdefghi
    ↓
$1などでdefが取り出すことができます。*言語によります。

キャプチャ「( )」と「+」 「( )+」

 キャプチャ「( )」内のパターンが1回以上あると比較されます。キャプチャ「( )」内の文字列は1つのパターンとしてみなされます。

abc(def)+jkl
 以下がマッチします。
abcdefjkl abcdefdefdefjkl

キャプチャ「( )」とOR条件「|」 「( | )」

 キャプチャ「( )」内のみで複数のOR条件を設定できます。

abc(def|ghi)jkl
 以下がマッチします。
abcdefjkl abcghijkl

全文検索

 全文検索では改行も含む検索を行わなければなりません。「( | )」によって改行を含む文字列を正規表現で表すには以下のような方法があります。

(.|\s)*?

 しかし、この方法ではキャプチャ機能を使おうとすると「(.|\s)」の部分もキャプチャされてしまいます。これ以外の方法としては以下のような方法があります。

[\s\S]*?

いずれかの文字 「[ ]」

 正規表現の「[ ]」は、カッコ内のいずれかの文字を比較します。
 例えば、[abc]とすると、a、b、cのいずれかの文字がマッチすればという条件になります。

abc[def]ghi
 以下がマッチします。
abcdghi abceghi abcfghi

否定のいずれかの文字 「[^ ]」

 カッコ「[ ]」内で「^」を付けると否定になります。
 例えば、[^abc]とすると、a、b、cのいずれかの文字でなければという条件になります。

abc[^def]ghi
 以下の場合はマッチしません。
abcdghi abceghi abcfghi

全文検索

 全文検索では改行も含む検索を行わなければなりません。「[ ]」によって改行を含む文字列を正規表現で表すには以下のような方法があります。

[\s\S]*?

パターン数の指定 「{ }」

 正規表現「{ }」は、パターン数を指定します。
 例えば、a{6}とすると、aが6回ある aaaaaa にマッチします。

ab{6}c
 以下がマッチします。
abbbbbbc

最小数、最大数 「{ , }」

 正規表現「{ , }」で、パターンの最小数と最大数を指定することができます。

ab{2,10}c
 以下がマッチします。
abbc abbbbbbbbbbc

最小数 「{ , }」

 正規表現「{ , }」で、パターンの最小数だけを指定することもできます。

ab{2,}c
 以下がマッチします。
abbc

エスケープ 「¥または\

 正規表現におけるエスケープ文字は「¥または\」です。どちらになっているかはシステムやプログラム言語といった環境によります。
 .*+?()|[]といった文字は正規表現として使われますので、そのままでは使用することができません。このエスケープ文字によって使用することができます。

a\.\*\?c
 以下のようなパターンとなります。
ab.*?c