正規表現の利用方法を知りたい

正規表現とは

正規表現とは、複数の文字列の中にある「パターン」を表現する記述方法です。
例えば、「apple」「application」「applause」という3つの文字列は、いずれも先頭3文字は「app」であるという「パターン」がありますが、このパターンを正規表現で表すと「^app」という記述内容にすることができます。

正規表現を利用するケースとしては、複数のデータの中からあるパターンに一致するデータを検索し抜き出す場合などによく用いられます。

正規表現による文字列検索例

b→dashにおける正規表現ルール

b→dashで利用する正規表現構文には「POSIX ERE(拡張正規表現)構文」と「Perl構文」の2種類があります。正規表現を使いたい場合は以下の表を参照して、正しい正規表現構文を使っていただくようお願いいたします。

b→dashの機能による構文の違い
アプリ 処理している場所 利用する構文
データパレット 置換タスク POSIX ERE構文
共通設定 コンバージョン設定(URL計測)
レコメンド フィルタ設定 POSIX
1003.2構文
共通設定 リレーション設定 Perl構文
共通設定 コンバージョン設定(イベント計測>HTML要素の指定)
web接客 配信先ページ設定、表示条件、閲覧人数計測ページ指定

POSIX ERE構文

前提

b→dashでは、一部のサーバーに「SnowFlake」というサービスを活用しており、この「SnowFlake」がサポートしている正規表現構文が「POSIX ERE(拡張正規表現)構文」になります。

SnowFlakeのwebサイトにて、利用できる正規表現関数や利用例が記載されていますので、参考までにご覧ください。

利用可能なメタ文字一覧

POSIX EREでは、以下表の「拡張正規表現(POSIX ERE)」の列に記載されているメタ文字を利用することができます。

【基本正規表現と拡張正規表現(POSIX ERE)の比較表】

基本正規表現 拡張正規表現
(POSIX ERE)
(対応なし) +
(対応なし) ?
(対応なし) |
¥{…¥} {…}
¥(…¥) (…)
( ¥(
) ¥)
[ ¥[
] ¥]
. ¥.
* ¥*
? ¥?
+ ¥+
^ ¥^
$ ¥$
メタ文字利用時はエスケープ文字である「¥」を記載しましょう
上記のメタ文字を利用する際は、「¥.」「¥^」のように「¥」を記載する必要があります
ちなみに「¥a」「¥-」のように、エスケープ文字がメタ文字以外の文字につけた場合は、エスケープ文字は無視され、動作に影響を与えることはありません。
ただし「¥¥a」「¥¥-」のように、エスケープ文字を2つ以上連続してつけると、想定外の動作が起きる可能性があるためなるべく避けましょう。
注意事項:自動変換処理の実施

SnowFlakeでは、記述された正規表現の文字列の先頭に「^」または末尾に「$」が含まれていない場合、文字列の先頭と末尾に「.*」を付与する処理が自動で実行されます。また、先頭と末尾のどちらか片方にだけ「^」または「$」の記述がある場合は、記述のない方にだけ「.*」が自動で付与されます。

以下に、自動付与の例をご紹介します。

記述した正規表現の文字列 自動付与後の文字列
abcd.com/cart .*abcd.com/cart.*
^abcd.com/cart ^abcd.com/cart.*
^abcd.com/cart$ ^abcd.com/cart$
.*abcd.com/cart.* .*abcd.com/cart.*

Perl構文

前提

Perl構文に関しては、一般的な構文ルールと同じです。

注意事項:エスケープ文字の記載

Perl構文を使う際に、メタ文字とスラッシュ記号に関しては、エスケープ文字を記載する必要があります。
例えば「store.com/cart/.*?mode=.*&page=6.*」という文字列を指定したい場合、「¥store.com/cart/.*?mode=.*&page=6.*」のように、エスケープ文字を使ってメタ文字の持つ特別な意味を打ち消す必要があります。 

注意事項:「含む」条件利用時の記載方法

含むという条件を利用するには、含むに指定したい文字列を「.*」で挟む必要があります。例えば、hogehogeという文字列を含む、という条件で正規表現を記載したい場合、「.*hogehoge.*」と記載するようお願いいたします。

使用したい正規表現が正しいかどうかは「正規表現チェッカー」などのサイトをご使用ください。
先読みの正規表現を使用することはできません

データファイルのクレンジングなどにおいて、先読みの正規表現を使用することはできませんのでご注意ください。

【先読みの正規表現の例】
肯定先読み…「(?=pattern)」
否定先読み…「(?!pattern)」