カテゴリー
Develop

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.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です