カテゴリー
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.~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.

コメントを残す

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