« AYA SATO - YSMF 2017 | Home | 鬼 2018 »

Feb 012018

Data StudioのREGEXP_MATCHでの正規表現

Data Studioにて独自Dimensionの設定にREGEXP_MATCH関数が使える。
正規ライブラリは高速かつ省メモリが売りのgoogle RE2

基本的な書式は他の正規ライブラリと変わらないように思うが、character classesが複数あったりして、全把握するのは大変そう。> Syntax · google/re2 Wiki · GitHub

とあるログ分析レポートをData Studioで作成する際に、ページタイプ別にURLをグルーピング必要があり、CASEを用いたカスタムDimensionでの正規表現にハマった部分があったのでメモ。

例えば以下のような2タイプのURLがあり、これらをグルーピングして統計する場合、

  • fuga.com/hoge00.html~99.html
  • fuga.com/hoge01_aaa.html~hoge01_zzz.html、hoge02_aaa.html~hoge02_zzz.html、...hoge10_zzz.html

REGEXP_MATCHは、普通であればこんな感じ

CASE 
WHEN REGEXP_MATCH(URL, "(fuga.com/hoge\d{1,2}.*.html)")THEN "Parent"
WHEN REGEXP_MATCH(URL, "(fuga.com/hoge\d{1,2}_.*.html)")THEN "Children"
ELSE "Others"
END

しかしData Studioではエラーが発生して保存できない。

色々試した結果、どうやらエスケープシーケンスにバックスラッシュ「\」が2つ書くとうまく動作するっぽい。

CASE 
WHEN REGEXP_MATCH(URL, "(fuga.com/hoge\\d{1,2}.*.html)")THEN "Parent"
WHEN REGEXP_MATCH(URL, "(fuga.com/hoge\\d{1,2}_.*.html)")THEN "Children"
ELSE "Others"
END

RE2の仕様か確認するために、Go言語もRegexpパッケージ+RE2ということで、Rego - A Go regular expression testerで確認してみる。

  • String:"fuga.com/hoge01_aaa.html"
  • regular expression
    • "fuga.com/hoge\\d{1,2}_.*.html" > Matchなし
    • "fuga.com/hoge\d{1,2}_.*.html" > Matchあり

「\\d{1,2}」指定ではMatchしないので、RE2としては正しい記述ではないようだ。

しかしData StudioのRE2ではこの記述でないと動かない。これがバグなのか、Data Studio独自仕様なのかは不明だが、もしRE2的に正しいがData Studioでエラーになる場合は、このダブルバックスラッシュを試してみると解決できるかもしれません。

参考)逆引きGolang (正規表現) < 色々サンプル掲載されていて便利であります。

追記(2018/2/4)

英語版のヘルプに本件についての記述がありました(何故か日本語版には無い・・汗)
REGEXP_MATCH - Data Studio (Beta) Help

  • Escape special characters with 2 backslash characters:
    REGEXP_MATCH(MyField, "foo\\.bar") matches the literal period character.

Leave a comment

Search and Archives