正規表現(「regexp」)とは、データ内のパターンに部分的または厳密に一致する、特定の文字列です。正規表現を使用して、柔軟なフィルタを作成し、グラフやコントロールで使用することができます。計算フィールドの数式では、以下の正規表現関数も使用できます。
REGEXP_CONTAINS | 入力値に正規表現のパターンが含まれる場合は true を返し、それ以外の場合は false を返します。 詳細 |
REGEXP_EXTRACT | 入力値の中で、正規表現のパターンに最初に一致する部分文字列を返します。 詳細 |
REGEXP_MATCH | 入力値が正規表現のパターンと一致する場合は true を返し、それ以外の場合は false を返します。 詳細 |
REGEXP_REPLACE | 入力値の中で、正規表現のパターンに一致するテキストをすべて replacement 文字列に置き換えます。 詳細 |
正規表現に代わる方法
正規表現の作成は複雑な場合があります。正規表現関数を使用する前に、単純なテキスト関数で目標を達成できるかどうか検討してください。次に示す関数は、正規表現と遜色なく機能します。使用するのに、正規表現の構文についての知識は必要ありません。
関数 | 説明 |
---|---|
CONTAINS_TEXT |
指定したテキストがフィールドや式で見つかった場合は true を返します。それ以外の場合は false を返します。 |
ENDS_WITH |
フィールドや式が指定したテキストで終わる場合は true を返します。それ以外の場合は false を返します。 |
LEFT_TEXT |
与えられた文字列の先頭から、指定した字数分の文字列を取り出します。 |
REPLACE | 元のテキストの中の検索テキストをすべて置換テキストに置き換えたものを返します。 |
RIGHT_TEXT |
与えられた文字列の末尾から、指定した字数分の文字列を取り出します。 |
STARTS_WITH |
フィールドや式が指定したテキストで始まる場合は true を返します。それ以外の場合は false を返します。 |
TRIM |
最初と最後のスペースを削除したテキストを返します。 |
正規表現の例
URL の最上位のディレクトリを抽出する場合は、以下のように指定します。
REGEXP_EXTRACT(URL, '^https://[^/]+/([^/]+)/')
たとえば、URL
フィールドにこのページのアドレスが含まれている場合、上記の関数は looker-studio
を返します。
広告キャンペーンを言語別に分類する場合は、以下のように指定します。
たとえば、この式を Google アナリティクス デモアカウントの「キャンペーン」ディメンションに適用すると、次のような結果が得られます。
キャンペーン | 言語 |
---|---|
Campaign #1 | その他の言語 |
1000549 | Google Analytics Demo | DR | apontes | NA | US | en | Hybrid | AW SEM | BKWS | ~ AW - Google Brand (US) | 英語 |
1000549 | Google Analytics Demo | DR | apontes | NA | CA | es | Hybrid | AW SEM | BKWS | ~ AW - YouTube (CA) | スペイン語 |
文字列内のセクションの順序を入れ替える場合は、以下のように指定します。
上記の例では、セクションはコロン(:)で区切られています。
メタ文字
メタ文字は、正規表現で特殊な意味を持つ文字です。ここでは、よく使用される一般的なメタ文字をいくつか紹介します。以下の例は Google アナリティクスのヘルプセンターにリンクされていますが、掲載されている情報は Looker Studio でも同様に参考にしていただけます。
正規表現の完全な構文については、google/RE2 GitHub ドキュメントをご覧ください。
ワイルドカード
. | 任意の 1 文字(文字、数字、記号)に一致します | 「1.」で一致するデータ: 10、1A 「1.1」で一致するデータ: 111、1A1 例 |
? | 直前の文字が 0 回または 1 回出現する場合に一致します | 「10?」で一致するデータ: 1、10 例 |
+ | 直前の文字が 1 回以上出現する場合に一致します | 「10+」で一致するデータ: 10、100 例 |
* | 直前の文字が 0 回以上出現する場合に一致します | 「1*」で一致するデータ: 1、10 例 |
| | OR 条件を作成します 正規表現の末尾では使用しないでください |
「1|10」で一致するデータ: 1、10 例 |
アンカー
^ | 隣接する文字が文字列の先頭である場合に一致します | 「^10」で一致するデータ: 10、100、10x 「^10」で一致しないデータ: 110、110x 例 |
$ | 隣接する文字が文字列の末尾である場合に一致します | 「10$」で一致するデータ: 110、1010 「10$」で一致しないデータ: 100、10x 例 |
グループ
( ) | 囲まれた文字が同じ順序で文字列に含まれる場合に一致します 他の正規表現をグループ化する場合にも使用します |
「(10)」で一致するデータ: 10、101、1011 「([0-9]|[a-z])」で一致するデータ: すべての数字と小文字 例 |
[ ] | 囲まれた文字が任意の順序で文字列に含まれる場合に一致します | 「[10]」で一致するデータ: 012、120、210 例 |
- | 角かっこ内の文字範囲が文字列に含まれる場合に一致します | 「[0-9]」で一致するデータ: 0~9 のすべての数字 例 |
エスケープ文字
\ |
隣接する文字を正規表現のメタ文字としてではなく通常の文字として解釈するよう指定します。 メタ文字の一致については、後述のヒントをご覧ください。 |
「\.」と指定すると、隣接するドットがワイルドカードとしてではなく、ピリオドや小数点として解釈されます。 「216\.239\.32\.34」で一致するデータ: 216.239.32.34 例 |
文字クラス
\d |
数字(≡ [0-9]) |
\D |
非数字(≡ [^0-9]) |
\s |
空白文字(≡ [\t\n\f\r ]) |
\S |
非空白文字(≡ [^\t\n\f\r ]) |
\w |
単語構成文字(≡ [0-9A-Za-z_]) |
\W |
非単語構成文字(≡ [^0-9A-Za-z_]) |
ヒント
式はシンプルに
正規表現はシンプルに作成してください。正規表現がシンプルであれば、他のユーザーが簡単に解釈して変更できます。
大文字と小文字の区別
(?i)
フラグを使用します。次に例を示します。REGEXP_EXTRACT(MyField, '(?i)(a.*)')
は、「abc123」と「ABC123」の両方を抽出します。
バックスラッシュのエスケープ
上述のとおり、バックスラッシュ(\)を使用すると、正規表現のメタ文字をエスケープして、通常の文字として扱うことができます。引用符で囲まれた文字列に含まれるバックスラッシュを通常の文字として一致させるには、バックスラッシュをエスケープする必要があります。その場合、正規表現にはバックスラッシュを 2 つ含めることになります。次に例を示します。
REGEXP_REPLACE(String, "(\\[.*\\])\\+(\\[.*\\])","\\2 \\1")
別の方法として、生の文字列のリテラル プレフィックス(R)を使用することもできます。
REGEXP_REPLACE(String, R"(\[.*\])\+(\[.*\])",R"\2 \1")