[データポータル] 正規表現関数の特殊文字のエスケープ処理を簡略化する方法が追加
2021年03月29日
ライター:土屋 英恵

Google データポータルで、正規表現関数の使用時に特殊文字をエスケープ処理する必要がある場合の記述が簡略化できるようになりました。
正規表現関数の使用時に特殊文字をエスケープ処理するには2つのバックスラッシュ(\)が必要で、エスケープ処理が多くなるほど記述が長くなり読みづらくなっていました。
今回追加された生文字列リテラルを使用することで、1つのバックスラッシュ(\)でエスケープ処理ができるようになり、記述が短縮され読みやすくすることができます。

1.データポータルの正規表現関数とエスケープ処理

データポータルでは、表やグラフにデータのフィルタを適用する際に、「含む」「次で始まる」といったマッチタイプの他に「次と一致する正規表現」や「次を含む正規表現」を選択することができます。これにより、データポータルに接続したデータソースに、正規表現による細かな条件でフィルタを適用して、表示したいデータのみに絞り込むことができます。
例えば、Google アナリティクスのディメンション「ページ」のデータで、パラメータの有無に関わらずTOPページ「/」のみのデータに絞り込みたいという場合、編集画面右側の[データ]タブの下部にある[フィルタ]で以下のような条件を作成します。

一致条件|ページ|次と一致する正規表現|^/(\?.*)?$



また、データポータルには計算フィールドで使用できる以下3種類の正規表現関数が用意されています。
これにより、データが正規表現で指定した条件に一致する場合にtrueを表示したり、正規表現に一致する文字列を指定した文字列に置き換えたりして、新たなフィールドを作成することができます。

正規表現関数の種類 説明

REGEXP_EXTRACT

入力値の中で、正規表現に最初に一致する文字列を返します。
構文:REGEXP_EXTRACT(X, regular_expression)
詳細(データポータルのヘルプ)

REGEXP_MATCH

入力値が正規表現と一致する場合はtrueを返し、
そうでない場合はfalseを返します。
構文:REGEXP_MATCH(X, regular_expression)
詳細(データポータルのヘルプ)

REGEXP_REPLACE

入力値の中で、正規表現に一致する文字列を指定した文字列に置き換えます。
構文:REGEXP_REPLACE(X, regular_expression, replacement)
詳細(データポータルのヘルプ)


例えば、Google アナリティクスのディメンション「ページ」のデータで、パラメータの有無に関わらずTOPページを全て「/」としてまとめたいという場合、データソースの編集画面で以下のような正規表現関数を使用して計算フィールドを作成することで、条件に合ったディメンションを追加できます。

REGEXP_REPLACE(ページ, "(^/(\\?.*)?$)","/")



パラメータ付きのTOPページのURLが「/」としてまとめられています。



正規表現の記述の中で、特殊文字を文字列として扱いたい場合、特殊文字の前にバックスラッシュ(\)を追加してエスケープ処理をすることが必要です。
データのフィルタで正規表現を使用する際のエスケープ処理は1つのバックスラッシュで行うことができますが、正規表現関数の場合2つのバックスラッシュ(\)が必要です。

エスケープする特殊文字(例) データのフィルタの
エスケープ処理
正規表現関数の
エスケープ処理
. \. \\. 
? \? \\?  
+ \+ \\+
[] \[\] \\[\\]

上記または2.で説明する方法で処理をしないと、計算フィールド上ではエラー表示がなくても、意図した結果が返ってこないということが起きますので、ご注意ください。

2. 生文字列リテラルの使用方法

生文字列リテラルを使用すると、1.で説明した正規表現関数の使用時に1つのバックスラッシュ(\)でエスケープ処理ができるようになります。
生文字列リテラルは、R引用符(R””)で対象の文字列を囲うことで使用できます。

  • R引用符なしの場合のエスケープ処理例
    REGEXP_REPLACE(String, "(\\[.*\\])\\+(\\[.*\\])","\\2 \\1")
  • R引用符を追加した場合のエスケープ処理例
    REGEXP_REPLACE(String, R"(\[.*\])\+(\[.*\])",R"\2 \1")

1. で説明した例と同じ条件でR引用符を追加したところ、同じ結果が返ってきました。

REGEXP_REPLACE(ページ, R"(^/(\?.*)?$)","/")





エスケープ処理が必要な文字が少ない場合にはあまりメリットはないかもしれませんが、エスケープ処理が必要な文字が多い場合や、記述全体が長くなるような場合には、文字数も少なくなり、別の編集者が見た際にも読みやすいというメリットはあると思います。

Google アナリティクス 360、オプティマイズ、データポータルの各サービスについてはアユダンテGMPサイトをご覧ください。

採用情報はこちら

この記事を書いた人
$uname
土屋 英恵
カスタマーサクセスコンサルタント
前職の広告代理店では、データアナリストとしてWEB広告の検証や効果分析、ソーシャルリスニングによるユーザーニーズ分析、Googleアナリティクスを活用したサイト改善等に携わる。このたび、データソリューションコンサルタントとして、主にGoogleアナリティクスの導入支援/活用サポートを行う。嗜好品はコーヒーとワイン。社内のコーヒーメーカーを愛用中。
最近書いた記事