GoogleAppsScript

【GAS】GoogleAppsScriptで活用する正規表現一覧まとめ【2023最新】

GASの正規表現の一覧まとめのサムネイル

Google Apps Script(GAS)内で活用する正規表現を一覧にまとめて、詳しく解説します。

正規表現を使用することで、テキストのパターンを識別し、データの抽出や整形、文字列の置換を効率的に行うことができます。

正規表現の使い方は以下の記事で紹介しています。

正規表現で文字列一致を検索する記事のサムネイル
【GAS】正規表現で文字列一致を検索する方法(match,indexOf,search,includes)GoogleAppsScript(GAS)による正規表現の使い方として、文字列内の特定文字列一致を検索する方法を紹介します。正規表現の使い方として基礎となる検索メソッド(match、indexOf、lastIndexOf、search、includes)に焦点を当てて解説します。これにより、複雑な文字列の検索が容易になります。...

正規表現とは

正規表現(Regular Expression)は、テキストの中から特定のパターンを検索したり、置換したりする表現方法です。

例えば、ある文字列内に特定のキーワードが含まれているか、メールアドレスや電話番号などの特定の形式に一致する文字列を探す場合に使えます。

正規表現は、パターンを記述するための特別な記号や文字を使い、そのパターンに一致する文字列を効率的に見つけ出します。

例1: メールアドレスの検索

あるテキスト内から、メールアドレスを検索する場合を考えてみましょう。正規表現を使うと、以下のように記述できます。

メールアドレスの正規表現

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}

この正規表現は、メールアドレスの一般的な形式に一致する文字列を見つけます。例えば、「user@example.com」という文字列はこの正規表現に一致します。

例2: 電話番号のフォーマット

電話番号の特定のフォーマットに一致する文字列を検索する場合を考えてみましょう。

電話番号の正規表現

\d{3}-\d{4}-\d{4}

この正規表現は、xxx-xxxx-xxxx(xは数字)という電話番号の形式に一致する文字列を見つけます。

正規表現で使用する特殊文字

文字クラス (Character Classes)

正規表現内で特定の文字の集合を表すために使用される重要な要素です。文字クラスを使うことで、指定した文字の中からどれか1つにマッチすることを示すことができます。

ガスシカオ

文字クラスは、特定の文字パターンを検索する際に非常に便利です。

文字クラスは角括弧 [ ] 内に文字を含めて定義されます。

角括弧内に含まれる文字は、その中からどれか1つにマッチすることを意味します。

文字意味正規表現の例マッチする例
[xyz]括弧内のいずれかの文字に一致/[aeiou]/a, “e” 但し “x” は除外
[a-c]指定した範囲内の文字に一致/[a-c]/a, “b”, “c”
[^xyz]括弧内のいずれでもない文字に一致/[^aeiou]/x, “y”, “z”
[^a-c]指定した範囲外の文字に一致/[^a-c]/x, “y”, “z”

特殊文字 (Special Characters)

特殊文字には、テキストの中で特別な意味を持つ文字があります。

正規表現パターン内でこれらの特殊文字を使用することで、特定のパターンを指定したり、テキスト内で特定の文字を検索したりすることができます。

文字意味正規表現の例マッチする例
\t水平タブに一致/a\ tb/a\tb
\r復帰文字に一致/a\rb/a\rb
\n行送り文字に一致/a\nb/a\nb
\v垂直タブに一致/a\vb/a\vb
\f改ページに一致/a\fb/a\fb
\b単語の境界に一致/\bword\b/word 但し “words” や “keyword” は除外
\B単語以外の境界に一致/\Bword\B/sword, “keyword” 但し “word” は除外
\0NUL文字に一致/\0/NUL文字
\cX制御文字に一致 (XはA-Zの文字)/\cM/キャリッジリターン制御文字
\xhh16進数コードからなる文字に一致/\x41\x42/AB
\uhhhUTF-16コードユニットからなる文字に一致/\u0041\u0042/AB
\u{hhhh}Unicode値からなる文字に一致 (uフラグが必要)/\u{41}\u{42}/AB

グループと量指定子 (Groups and Quantifiers)

両指定子

正規表現には、*、+、?、{m,n}などの繰り返しを示す記号が存在します。

両指定子は、規表現内で特定のパターンが出現する回数や範囲を指定するための要素です。

貪欲マッチとは

貪欲マッチとは、可能な限り長い文字列にマッチしようとしていることを指しています。

ここで紹介する「*、+、?、{m,n}」などの記号は通常、貪欲(greedy)マッチとして動作します。

文字意味正規表現の例マッチする例
(x)キャプチャグループとしてxを扱う/(abc)/abc 但し “ab” は除外
(?:x)非キャプチャグループとしてxを扱う/(?:abc)/abc 但しキャプチャされない
x*直前のxの0回以上の繰り返しに一致/ab*c/ac, “abc”, “abbc”
x+直前のxの1回以上の繰り返しに一致/ab+c/abc, “abbc” 但し “ac” は除外
x?直前のxの0回または1回の繰り返しに一致/colou?r/color, “colour” 但し “colouur” は除外
x{n}直前のxがちょうどn回出現するに一致/ab{2}c/abbc
x{n,}直前のxが少なくともn回出現するに一致/ab{2,}c/abbc, “abbbc”
x{n,m}直前のxがn回からm回まで出現するに一致/ab{2,3}c/abbc, “abbbc” 但し “abb” は除外
x*?正確に0回以上の繰り返しに一致/ab*?c/ac, “abc”
x+?貪欲でない1回以上の繰り返しに一致/ab+?c/abc
x??貪欲でない0回または1回の繰り返しに一致/colou??r/color, “colouur” 但し “colour” は除外
x{n}?貪欲でないn回の繰り返しに一致/ab{2}?c/abbc 但し “ab” は除外
x{n,}?貪欲でない少なくともn回の繰り返しに一致/ab{2,}?c/abbc, “abbbc”
x{n,m}?貪欲でないn回からm回までの繰り返しに一致/ab{2,3}?c/abbc, “abbbc” 但し “abb” は除外

肯定先読みと否定先読み (Positive and Negative Lookaheads)

肯定先読み(Positive Lookaheads)と否定先読み(Negative Lookaheads)は、正規表現の中で特定の条件が真である場合にのみマッチするように制約を加えるための機能です。

ガスシカオ

これらの先読みは、文字列内の特定の位置において、その位置の後ろに特定のパターンが続くかどうかを確認するために使用されます。

肯定先読み (Positive Lookaheads):

肯定先読みは、マッチする際に指定した条件が成立しているかを確認します。具体的には、パターンの後に (?=...) という形で指定します。これに続く ... の部分が、肯定先読みが成立するかどうかの条件を示します。肯定先読みは、その位置の後ろに指定されたパターンが存在する場合にのみマッチします。

ガスシカオ

例えば、\d+(?=%) という正規表現は、数字の後ろに % が続く場合にマッチします。これは、数字がパーセント記号 % で終わる場合にマッチするという意味です。

否定先読み (Negative Lookaheads):

否定先読みは、マッチする際に指定した条件が成立していないことを確認します。肯定先読みと同様に (?=...) の形で指定しますが、肯定先読みとは逆に、... の部分が成立しない場合にマッチします。

ガスシカオ

例えば、\d+(?!%) という正規表現は、数字の後ろに % が続かない場合にマッチします。つまり、数字がパーセント記号 % で終わらない場合にマッチします。

肯定先読みと否定先読みの例

文字意味正規表現の例マッチする例
x(?=y)xの後にyが続く場合に一致/\d+(?=%)/123 但し “123%” は除外
x(?!y)xの後にyが続かない場合に一致/\d+(?!%)/123% 但し “123” は除外
(?<=y)xyの前にxがある場合に一致/(?<=$)\d+/$123 で “123” のみ
(?<!y)xyの前にxがない場合に一致/(?<!$)\d+/123 但し “$123” は除外

最後に

正規表現は、テキスト処理のさまざまな側面で価値を発揮します。

テキストの解析、バリデーション、データの抽出、フォーマット変換など、幅広い用途に活用することができます。

正規表現で文字列一致を検索する記事のサムネイル
【GAS】正規表現で文字列一致を検索する方法(match,indexOf,search,includes)GoogleAppsScript(GAS)による正規表現の使い方として、文字列内の特定文字列一致を検索する方法を紹介します。正規表現の使い方として基礎となる検索メソッド(match、indexOf、lastIndexOf、search、includes)に焦点を当てて解説します。これにより、複雑な文字列の検索が容易になります。...