正規表現の基本的な書き方

正規表現の基本的な書き方一覧。よく忘れるのでメモとして記載します。

正規表現の書き方マッチする文字
abcabc
abc|aecabc, aec
a(b|e)cabc, aec
a[be]c abc, aec
a[abcde]caac, abc, acc, adc, aec
a[a-e]caac, abc, acc, adc, aec
a[a-cX-Z]caac, abc, acc, aXc, aYc, aZc
abcd?eabce, abcde
abcd+eabcde, abcdde, abcddde, …
abcd*eabce, abcde, abcdde, abcddde, …
a{2}aa
a{2}b{4}aabbbb
a{2,}aa, aaa, aaaa, aaaaa, …
a{2,4}aa, aaa, aaaa
[0-9]0, 1, 2, 3, 4, 5, 6, 7, 8, 9(数値のみ)
[1-36-9]1, 2, 3, 6, 7, 8, 9
\d0, 1, 2, 3, 4, 5, 6, 7, 8, 9(数値のみ)
\D数値以外
[^0-9]数値以外([](カッコ)内先頭の^(キャレット)は否定)
[^\D]数値のみ(数値以外の否定は数値のみ)
0[89]0-\d{4}-\d{4}  携帯番号(080-xxxx-xxxx, 090-xxxx-xxxx)  
^abc行の先頭のabc
abc$行の末尾のabc
^abc$abcだけの行(行の先頭も行の末尾もabc)


正規表現 基本的な書き方解説

上記の内容をざっくり解説します。

abc|aec

“|”(パイプ)で挟むと または(OR) 指定できる。abc, aec にマッチする。

a(b|e)c

“()”(かっこ)内の文字を”|”で挟むと または(OR) 指定できる。abc, aec にマッチする。

a[be]c

“[]”(角かっこ)内の文字を または(OR) 指定できる。角カッコの場合、パイプを挟む必要はない。abc, aec にマッチする。

a[abcde]c

ひとつ上の正規表現の文字数を増やした正規表現。 aac, abc, acc, adc, aec にマッチする。

a[a-e]c

“[]”内でハイフンで文字や数値を指定すると範囲指定できる。上記は、”a” から “e” までの小文字の文字列を指定している。aac, abc, acc, adc, aec にマッチする。

a[a-cX-Z]c

上記正規表現の範囲指定を2つ指定している正規表現。”a” から “c” の小文字、 “X” から “Z” の大文字を指定している。 aac, abc, acc, aXc, aYc, aZc にマッチする。

abcd?e

対象文字の後に、”?”(クエスチョンマーク)を指定すると、 1文字あるまたはなくても、つまり 0回 または 1回 文字があれば、マッチする。上記の場合、dがあってもなくてもマッチするため、 abce, abcde にマッチする。

abcd+e

対象文字の後に、”+”(プラス)を指定すると、対象文字が1文字以上連続してあれば、つまり 1回以上 文字があればマッチする。上記の場合、dが1文字以上あればマッチするため、 abcde, abcdde, abcddde, … にマッチする。

abcd*e

対象文字のあとに、”*”(アスタリスク)を指定すると、対象文字が1文字以上連続してあるまたはなくても、つまり 0回 または 1回以上 文字があればマッチする。上記の場合、abce, abcde, abcdde, abcddde, … にマッチする。

a{2}

対象文字のあとに、”{n}”(波カッコ、nは数字)を指定すると、対象文字が連続してn回ある場合、マッチする。上記の場合、aa にマッチする。

a{2}b{4}

上記の複数指定した正規表現。上記の場合、”a” を 2回、”b” を 4回 なので、aabbbb にマッチする。

a{2,}

対象文字のあとに、”{n,}”を指定すると、対象文字が連続して n回以上 ある場合、マッチする。上記の場合、aa, aaa, aaaa, aaaaa, … にマッチする。

a{2,4}

対象文字のあとに、”{n, m}”を指定すると、対象文字が連続して n回以上 かつ m回以下 ある場合、マッチする。上記の場合、aa, aaa, aaaa にマッチする。

[0-9]

“[]”(角カッコ)の範囲していで、数値を指定した正規表現。”0” から “9” までの数値を指定する。上記の場合、0, 1, 2, 3, 4, 5, 6, 7, 8, 9(数値のみ)にマッチする。

[1-36-9]

上記の範囲指定を複数した正規表現。”1″ から “3” または “6” から “9” の数値にマッチする。上記の場合、1, 2, 3, 6, 7, 8, 9 にマッチする。

\d

数値の場合のみにマッチする。”[0-9]” と同様。上記の場合、0, 1, 2, 3, 4, 5, 6, 7, 8, 9(数値のみ)にマッチする。

\D

数値以外の文字、記号にマッチする。”[^0-9]” や “[^\d]”といった数値の否定と同様。

[^0-9]

“[]”(角カッコ)内の先頭に記載した “^”(キャレット)は否定の正規表現。”[0-9]”で数値を指定し、それを否定する。[^\D]も同様。上記の場合、数値以外にマッチする。

0[89]0-\d{4}-\d{4}

携帯番号(080-xxxx-xxxx, 090-xxxx-xxxx)を指定した正規表現。”080″ または “090” で始まり、”-“(ハイフン)で区切られた数値4桁がある場合、マッチする。

^abc

“^”(キャレットやチルドやハットと呼ぶ)が行の先頭を指定する。上記の場合、行の先頭にある “abc” にマッチする。

abc$

“$”(ドル)が行の末尾を指定する。上記の場合、行の末尾にある “abc” にマッチする。

^abc$

行の先頭と末尾にある “abc” つまり 行に “abc” のみの文字列にマッチする。

正規表現で文字列を含む行、文字列を含まない行を選択、置換する(vscode、サクラエディタ)

テキストエディタでよく利用するテクニックの一つです。

正規表現で文字列を含む行、文字列を含まない行を選択、置換する

logなど、長いテキストから任意の文字列を含む行を選択する正規表現と、それとは逆に、文字列を含まない行を選択する正規表現のサンプルになります。

正規表現は、VSCode、ATOM、SublimeTextからサクラエディタまで、よく利用されるエディタでは、基本的にサポートしている機能です。

今回はエディタに、VSCodeを利用します。

コピー用一覧

内容 正規表現
文字列を含む行を検索.*文字列.*
文字列を含む行を削除(置換)(LF).*文字列.*\n
文字列を含まない行を検索^(?!.*文字列).*
文字列を含まない行を削除(置換)(LF)^(?!.*文字列).*\n

※サクラエディタなどでShift-JISのファイルを扱っている場合は、上記“\n”(LF)を“\r\n”(CRLF)に置き換えます

その他の正規表現の基本的な書き方はこちらをご覧ください。

以下、各正規表現の使用例です。

正規表現で文字列を含む行を検索する

正規表現 文字列を含む行を検索するコマンド

.*文字列.*

VScodeでは「Ctrl」+「F」で検索のウインドウが表示されます。

また、正規表現を利用するには正規表現を有効にする必要があります。VSCodeの場合、検索ウインドウが表示されている状態で「Alt」+「R」を押すか、検索ウインドウの右側にある「Use Ragular Expression」ボタンを押します。

画像は、VSCodeで”「あい」を含む行”を検索しています。

正規表現 文字列を含む行を削除(置換)するコマンド(LF)

.*文字列.*\n

一部の条件に当てはまる行を削除したい時に利用します。私の場合、logから共通フレームワークなどの特定のアプリケーションのログのみ削除したい場合などに利用しています。

VScodeでは「Ctrl」+「H」で置換(Replace)のウインドウが表示されます。

画像は、VSCodeで「あい」を含む行を削除(ブランク(空白)に置換)しています。

※改行コードは「\n」で指定します。

正規表現 文字列を含む行を削除するコマンド(CRLF)

.*文字列.*\r\n

さくらエディタでは、デフォルトで改行コードがCRLFとなっており、「\r\n」となります。

では、続いて逆の文字列を含まない行の選択を行います。

正規表現で文字列を含まない行を選択する

正規表現 文字列を含まない行を検索するコマンド

^(?!.*文字列).*

VScodeでは「Ctrl」+「F」で検索のウインドウが表示されます。

画像は、VSCodeで「あい」を含まない行を検索しています。

正規表現 文字列を含まない行を削除(置換)するコマンド(LF)

^(?!.*文字列).*\n

一部の条件に当てはまらない行を削除したい時に利用します。私の場合、logから特定のアプリケーションのログのみ残したい場合などに利用しています。

VScodeでは「Ctrl」+「H」で置換(Replace)のウインドウが表示されます。

画像は、VSCodeで「あい」を含まない行を削除(ブランク(空白)に置換)しています。

※改行コードは「\n」で指定します。

正規表現 文字列を含まない行を削除するコマンド(CRLF)

^(?!.*文字列).*\r\n

さくらエディタでは、デフォルトで改行コードがCRLFとなっており、「\r\n」となります。


正規表現 解説

正規表現で文字列を含む行を検索する場合、「.*文字列.*」を指定しました。

「.」(ドット)は、1文字で何が入ってもOK(ヒットする)という意味です。

「*」(アスタリスク)は、直前の要素の繰り返し(0回含む)という意味です。

「.*」は、1つの文字が0回以上あれば、ということになります。

したがって、「.*文字列.*」を指定した場合、「文字列」の前後に何か入力がある行が対象となります。

文字列を含まない行を検索する場合、「^(?!.*文字列).*」を指定しました。

「^」(キャレット または チルダ)は、行の先頭を意味します。

「(?!XXX)」は、カッコ()内のXXXが含まれていないという意味です。

したがって、「^(?!.*文字列).*」を指定した場合、先頭からみて「文字列」が含まれていない場合、行が対象となります。