Google アナリティクス、Google タグマネージャやYahoo!タグマネージャーに代表されるタグマネジメントツールなど、これらを利用したことがある方なら1度は正規表現という単語を見たり耳にしたことがあるかと思います。
IT用語辞典 e-Wordsによると、正規表現とは次のように記されています。
正規表現とは、文字列のパターンを表現する表記法。文字列の検索・置換を行うときに利用される。
通常の文字と、メタキャラクタと呼ばれる特別な意味を持った記号を組み合わせて表記される。例えば「^」という文字は「行頭」、「.」は「任意の1文字」、「+」という文字は「直前の要素の1回以上の繰り返し」を意味する。
正規表現を使えば、文字列を直接指定せず、「特徴」(パターン)を指定することができるため、表記の揺れを吸収して検索を行ったり、複数の異なる文字列を一括して置換したりすることができる。
ちょっと分かりにくいですよね…。ひと言で言ってしまえば複数の文字列を1つの表現で括るということになるのですが、イメージしやすいように1つ例を上げてみます。
Google アナリティクスで「集客」→「すべてのトラフィック」→「参照元/メディア」のレポートを開いたときに、例えば次の「参照元/メディア」がレポートとして表示されたとします。
- yahoo / cpc
- yahoo / organic
- google / cpc
- google / organic
- indeed / cpc
そして、上記から「yahoo / cpc」と「google / cpc」のレポートデータだけ抽出したいとします。
Google アナリティクスのレポート上にはデータにフィルタをかけるための検索窓は1つしかありません。
ここで正規表現を知らない人は、恐らくアドバンスドフィルタで「●●を含む」といった条件を複数回使うとAND検索になってしまうために、「yahoo / cpc」と「google / cpc」の2回検索を行ってからレポートデータをマージする方法を取る方も多いのではないでしょうか?
こんな時に正規表現は力を発揮します。
フィルタの検索条件を「含む」から「正規表現」に変更して、「(yahoo|google) / cpc」と入力してみてください。どうですか?データは表示されましたか?
このように、複数の対象から特定の文字列を含むものだけ任意に抽出したり、タグマネジメントツールでは複数のURLを指定したりすることを1度の記述で可能にするのが正規表現です。
前置きが長くなりましたが、今回は運用型広告の運用担当者が知っておくべき正規表現について、Google アナリティクスや各種タグマネジメントツールでよく使うURLを正規表現で表すことを目的として、最低限必要な基礎中の基礎をお伝えします。
目次
基本は「文字列」と「特殊な役割を持つ文字」の組み合わせ
正規表現とはいえ、基本的には指定した文字列(例えば「abc」など)を文章の先頭から順に走査していき、一致するものが発見された時点でマッチしたとされます。これは単純な検索ですね。
正規表現はこれに加えてメタ文字と呼ばれる特殊な役割を持つ文字を組み合わせることで、1回の検索で複数の文字列をマッチさせることができるようになります。実際に、前述の例で「(yahoo|google) / cpc」では1回の検索で「yahoo / cpc」と「google / cpc」のどちらかにマッチさせていますが、これと同じイメージです。
エスケープ処理と特別な役割をもつメタ文字
正規表現で一部の記号はメタ文字と呼ばれ特殊な意味合いを持ちます。
メタ文字には上記のようなものがあり、これらメタ文字を利用することで高度な検索(パターンマッチ)を行うことが可能になります。
エスケープ処理
検索を行いたい文字列中の文字に「.」や「+」の文字を含めたい場合(特に「.」は https://anagrams.jp のようにURL中でも頻出する記号)は、エスケープという処理を行う必要があります。
具体的にはメタ文字の直前に半角の「¥」(環境によっては半角バックスラッシュ「\」)をつけるだけです。これによって、直後の記号をメタ文字として扱わずに単純な記号として扱ってくれるようになります。
なので、前述の https://anagrams.jp を正規表現で表すとなると次のようになります。
なお、「¥」自体を指定したい場合は「¥¥」という記述になります。
※注:Webサーバの都合上「¥」を半角で表すと「\」になってしまうため、本記事において「¥」は全角文字で代替しています
メタ文字の役割
メタ文字とは特殊な役割を持った文字で、主に次のメタ文字が使われます。
「.」何でもよい1文字
英数字、日本語、スペースなど、文字の種類には関係なく任意の1文字にマッチします。
「*」「+」「?」同じ文字の繰り返し
同じ文字を繰り返す場合に使用します。「*」「+」「?」の違いは、直前の文字を必ず含むか否か、マッチを複数回行うかどうかと言った違いがあります。
「*」直前の文字が無いか、直前の文字が1個以上連続するものにマッチ
直前の文字が含まれていない、例えば下記の「ap*e」の例だと「ae」という文字列にもマッチしてしまいますので注意が必要です。
「+」直前の文字が1個以上連続するものにマッチ
「*」の場合と異なり、直前の文字が最低でも1回、それ以降は同じ文字が連続する場合にマッチします。
「?」直前の文字が全く無いか1つだけ存在する場合にマッチ
あまり利用することが無いかもしれませんが、「apples?」と記述することで「apple」と「apples」と言ったように単数形と複数形どちらでも合致させたいといった場合に使います。
「.」と「*」「+」「?」の組み合わせ
前述した何でもよい任意の1文字を表す「.」と「*」「+」「?」は組み合わせて使うことが出来ます。ただし、「*」「+」「?」それぞれの意味合いを理解していないと組み合わせた時に意図しないマッチが行われる可能性もあるので注意です。
「^」「$」行頭と行末
正規表現では指定したパターン(検索するために記述した文字列)が、検索対象となる文字列や文章のどこに位置をしていてもそれが含まれればマッチしたという判定になります。そのため、〇〇で始まる○○で終わるものを検索したい場合には「^」や「$」を正規表現の直前または直後に付加します。
「 [ ] 」指定する文字のうちのいずれか
この「 [ ] 」の間で指定された中の複数の文字のどれか1文字とマッチさせたい場合に使います。また「 [^ ] 」という風に指定した場合は、指定された複数の文字のどれか1文字とマッチさせたくないという意味合いになります。
ここで1点注意すべきことがあります。「 [ ] 」の中ではメタ文字は普通の文字として認識されるというルールがあります。ただし例外として、「^」が先頭に来た場合は前述のとおり否定を示すため「^」を検索したい場合は2文字目以降で指定、「]」を検索したい場合は「¥]」のようにエスケープが必要、「¥」を検索したい時も「¥¥」のようにエスケープが必要になります。
また、「 [ ] 」の中では次のようにマッチする文字の範囲を指定する表現を行えます。指定したい文字の範囲が広い場合はこちらの表現を利用することもお勧めです。
「 | 」前後で指定したものが含まれる
正規表現Aまたは正規表現Bにマッチさせたいと言ったように、複数の正規表現のうちいずれかにマッチさせたい時に利用します。
「( )」グルーピング
「( )」で囲むことによって「( )」内の正規表現を1つの塊として扱うことができるようになります。主に前述の「 | 」と組み合わせて使うことが多いです。
正規表現の省略形を表すメタ文字
前項では正規表現で一般的に使われるメタ文字について紹介しましたが、正規表現をスマートな形で表現するための用途として省略形を表すメタ文字も存在します。
省略形は複数存在しますが、検索対象がURLの文字列である場合に使えそうなものに絞ってご紹介します。
省略形の活用方法
桁数に関係なく数字が連続したり、何らかの文字列(文字数は任意)をマッチさせたい場合、省略形と繰り返しを表すメタ文字とを組み合わせて使うことが多いです。
「¥d」の活用例
「¥w」の活用例
正規表現チェッカーの活用
検索対象の文字列やURL一覧に対して記述した正規表現が本当に意図したマッチをしているか確認するために、各種の正規表現チェッカーを使うと便利です。筆者がよく使うチェッカーをご紹介します。
javascipt 正規表現 チェッカー
対象文字列に検索対象となるURL群などを入力、パターン文字列に正規表現を記述すると、判定の結果欄でマッチした文字列に対してリアルタイムでハイライトされます。
REGEXPER
記述した正規表現がどのようにマッチされるか視覚的に表してくれます。筆者はREGEXPERで正規表現を作成して、前述のチェッカーでチェックを行うという流れで進めています。ただし、このツールは「/(半角スラッシュ)」も「¥(\)」でエスケープをしないとエラーとなってしまいますので注意です。
なぜこんなことが起きるかというと、REGEXPERはPerl言語で構成されているツールになっており、Perlでは「/」も特殊文字として扱われるために「¥(\)」によるエスケープが必要になります。ツールによって表現方法が微妙に異なることから、これを正規表現の方言と言ったりします。
参考:REGEXPER
最後に
本記事は、Google アナリティクスや各種タグマネージャーにおいて、レポートや対象URLのフィルタリングをするために必要な正規表現の基礎中の基礎についてお伝えいたしました。
これは一例ですが、動的リマーケティングやCriteoなどで複数種類のタグを複数のページや階層に渡って実装を依頼する場合、すべてのURLを書き出してタグの実装を指示するという訳にはいきません。加えて、実装するのはエンジニアの方に対応をしてもらうことが多いこともあり、共通言語である正規表現を使って指示をしてあげたほうが実装もスムーズに進みます。
正規表現はそれだけで500ページぐらいの解説書になるぐらい奥が深いうえに、ツールによって生まれる微妙な差(方言)もありますが、運用型広告の運用者が業務で扱うレベルとしては基本中の基本だけ理解してしまえばほぼ困りません。
実際にはもっと複雑な検索や置換まで正規表現で実現することも可能ですが、応用に関しては各自でぜひ調べてみてくださいね。
おまけ
次に上げる過去記事で紹介しているGoogle アナリティクスのレポート活用法やタグマネージャに関する記事と合わせてお読みいただけると、正規表現の活用の幅がグッと広がると思います。ご参考下さい。