2021-06-06 · 6

正規表現チートシート

regextil

この記事は公開から2年以上経過しています。

正規表現とは


正規表現とは?

正規表現とは、辞書的な意味では特定の規則を持つ文字列の集合を表現するために使う形式言語です。主にプログラミング言語やテキストエディタなどで文字列の検索と置換の用途に使われています。この正規表現はコードが簡単な分だけ可読性が非常に低く、覚えるか見ないと理解しづらいという問題点があります。

正規表現の用語たち

正規表現で使われる記号を Meta 文字と表現します。

<table style="border-collapse: collapse; width: 100%; height: 280px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;"><b>表現式</b></td><td style="width: 70%; text-align: center; height: 20px;"><b>意味</b></td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">^x</td><td style="width: 70%; text-align: justify; height: 20px;">文字列の始まりを表し、x 文字で始まることを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x$</td><td style="width: 70%; text-align: justify; height: 20px;">文字列の終了を表し、x 文字で終了することを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> .x</td><td style="width: 70%; text-align: justify; height: 20px;">任意の 1 文字の桁を表し、文字列が x で終わることを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x+</td><td style="width: 70%; text-align: justify; height: 20px;">反復を表し、x 文字が 1 回以上反復されることを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x?</td><td style="width: 70%; text-align: justify; height: 20px;">存在の有無を表し、x 文字が存在することも、存在しないこともあり得ることを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> x*</td><td style="width: 70%; text-align: justify; height: 20px;">反復の有無を表し、x 文字が 0 回またはそれ以上反復されることを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> x|y</td><td style="width: 70%; text-align: justify; height: 20px;">or を表し、x または y 文字が存在することを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> (x)</td><td style="width: 70%; text-align: justify; height: 20px;">グループを表し、x をグループとして処理することを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> (x)(y)</td><td style="width: 70%; text-align: justify; height: 20px;">グループの集合を表し、前から順に番号を付与して管理し、x、y は各グループのデータとして管理されます。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">(x)(?:y)</td><td style="width: 70%; text-align: justify; height: 20px;">グループの集合に対する例外を表し、グループ集合として管理されないことを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x{n}</td><td style="width: 70%; text-align: justify; height: 20px;">反復を表し、x 文字が n 回反復されることを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;">x{n,}</td><td style="width: 70%; text-align: justify; height: 20px;">反復を表し、x 文字が n 回以上反復されることを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;">x{n,m}</td><td style="width: 70%; text-align: justify; height: 20px;">反復を表し、x 文字が最小 n 回以上最大 m 回以下で反復されることを意味します<span style="color: #000000;">。</span></td></tr></tbody></table>

Meta 文字の中でもより特殊に使われる文字が存在します。[] は内部に指定された文字列の範囲のうち 1 文字だけを選択するという特殊な意味を持ちます。

<table style="border-collapse: collapse; width: 100%; height: 300px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"><b>表現式</b></td><td style="width: 69.7674%; text-align: center; height: 20px;"><b>意味</b></td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">[xy]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">文字の選択を表し、x と y のうち 1 つを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> [^xy]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">not を表し、 x および y を除いた文字を意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> [x-z]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">range を表し、x 〜 z の間の文字を意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">^</td><td style="width: 69.7674%; text-align: justify; height: 20px;">escape を表し、^ を文字として使うことを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \b</td><td style="width: 69.7674%; text-align: justify; height: 20px;">word boundary を表し、文字と空白の間の文字を意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\B</td><td style="width: 69.7674%; text-align: justify; height: 20px;">non word boundary を表し、文字と空白の間ではない文字を意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \d</td><td style="width: 69.7674%; text-align: justify; height: 20px;">digit を表し、 数字を意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \D</td><td style="width: 69.7674%; text-align: justify; height: 20px;">non digit を表し、数字ではないものを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \s</td><td style="width: 69.7674%; text-align: justify; height: 20px;">space を表し、空白文字を意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \S</td><td style="width: 69.7674%; text-align: justify; height: 20px;">non space を表し、空白文字ではないものを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\t</td><td style="width: 69.7674%; text-align: justify; height: 20px;">tab を表し、タブ文字を意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\v</td><td style="width: 69.7674%; text-align: justify; height: 20px;">新しくタブ文字を探します。 </td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\w</td><td style="width: 69.7674%; text-align: justify; height: 20px;">word を表し、アルファベット + 数字 + _ のうちの 1 文字であることを意味します。</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\W</td><td style="width: 69.7674%; text-align: justify; height: 20px;">non word を表し、アルファベット + 数字 + _ ではない文字を意味します。</td></tr></tbody></table>

正規表現を使うとき Flag というものが存在しますが、Flag を使わないと文字列に対して検索を 1 回だけ処理して終了します。

<table style="border-collapse: collapse; width: 100%; height: 80px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;"><b>Flag</b></td><td style="width: 84.4186%; text-align: center; height: 20px;"><b>意味</b></td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;"> g</td><td style="width: 84.4186%; text-align: justify; height: 20px;">Global を表し、対象文字列内のすべてのパターンを検索することを意味します。</td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;">i</td><td style="width: 84.4186%; text-align: justify; height: 20px;">Ignore case を表し、対象文字列に対して大文字・小文字を識別しないことを意味します。</td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;">m</td><td style="width: 84.4186%; text-align: justify; height: 20px;">Multi line を表し、対象文字列が複数行の文字列である場合にも検索することを意味します。</td></tr></tbody></table>

/[0-9]/g
全体から 0~9 の数字のうち『一つ』だけの数字を探す
/[no]/g
全体から 'n' または 'o' のうち『一つ』だけの文字を探す

<メール例>

/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i

0~9 の数字または a~z A~Z のアルファベットのいずれかで始まり、途中に - _ \ . が存在してもよく、
0~9 a~z A~Z を繰り返せる。次に必ず @ が来て、0~9 a~z A~Z のいずれかが存在しなければならず、
その後 - _ \ . が存在してもよく、0~9 a~z A~Z を繰り返せる。次に . が必ず存在しなければならず、
a~z A~Z 2~3 個存在しなければならない。この正規表現全体は大文字・小文字を区別しない。

参考:

https://hamait.tistory.com/342

https://choseongho93.tistory.com/130


原文(韓国語): tistory — 2021-06-06 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。

コメント

コメントを削除しますか?

関連記事

正規表現チートシート · 나봄하랑