正規表現(regexp)とは、データ内のパターンに部分的または厳密に一致する、特定の文字列です。正規表現を使用して、柔軟なフィルタを作成し、グラフやコントロールで使用することができます。計算フィールドの数式では、以下の正規表現関数も使用できます。
REGEXP_CONTAINS |
入力値に正規表現のパターンが含まれる場合は true を返し、それ以外の場合は false を返します。REGEXP_CONTAINS の詳細 |
REGEXP_EXTRACT |
入力値の中で、正規表現のパターンに最初に一致する部分文字列を返します。REGEXP_EXTRACT の詳細 |
REGEXP_MATCH |
入力値が正規表現のパターンと一致する場合は true を返し、それ以外の場合は false を返します。REGEXP_MATCH の詳細 |
EGEXP_REPLACE |
入力値の中で、正規表現のパターンに一致するテキストをすべて replacement 文字列に置き換えます。EGEXP_REPLACE の詳細 |
正規表現に代わる方法
正規表現の作成は複雑な場合があります。正規表現関数を使用する前に、単純なテキスト関数で目標を達成できるかどうか検討してください。次に示す関数は、正規表現と遜色なく機能します。使用するのに、正規表現の構文についての知識は必要ありません。
関数 | 説明 |
---|---|
CONTAINS_TEXT |
指定したテキストがフィールドまたは式で見つかった場合は true を返します。それ以外の場合は false を返します。 |
ENDS_WITH |
フィールドまたは式が指定したテキストで終わる場合は true を返します。それ以外の場合は false を返します。 |
LEFT_TEXT |
指定した文字列の先頭から指定した数の文字を返します。 |
REPLACE |
検索テキストがすべて置換テキストに置き換えられた元のテキストのコピーを返します。 |
RIGHT_TEXT |
指定された文字列の末尾から指定した数の文字を返します。 |
STARTS_WITH |
フィールドまたは式が指定したテキストで始まる場合は true を返します。それ以外の場合は false を返します。 |
TRIM |
先頭と末尾のスペースを削除したテキストを返します。 |
正規表現の例
MyField に空白文字が含まれる場合に一致します。
REGEXP_CONTAINS(MyField, "\\s+")
URL の最上位のディレクトリを抽出する場合:
REGEXP_EXTRACT(URL,
^https://[^/]+/([^/]+)/
)
たとえば、URL
フィールドにこのページのアドレスが含まれている場合、上記の関数は looker-studio
を返します。
広告キャンペーンを言語別に分類する場合は、以下のように指定します。
CASE
WHEN REGEXP_MATCH(Campaign 2, R".*\|\s*en\s*\|.*") then "English"
WHEN REGEXP_MATCH(Campaign 2, R".*\|\s*es\s*\|.*") then "Spanish"
ELSE "Other language"
END
たとえば、この正規表現を Google アナリティクス デモアカウントの「キャンペーン」ディメンションに適用すると、次のような結果が得られます。
キャンペーン | 言語 |
---|---|
キャンペーン 1 | その他の言語 |
1000549 | Google Analytics Demo | DR | apontes | NA | US | en | Hybrid | AW SEM | BKWS | ~ AW - Google Brand (US) | 英語 |
1000549 | Google Analytics Demo | DR | apontes | NA | CA | es | Hybrid | AW SEM | BKWS | ~ AW - YouTube (CA) | スペイン語 |
文字列内のセクションの順序を入れ替える場合は、以下のように指定します。
REGEXP_REPLACE(Campaign, R'(.*):(.*)', R'\2 \1')
上記の例では、セクションはコロン(:)で区切られています。
メタ文字
メタ文字は、正規表現で特殊な意味を持つ文字です。ここでは、よく使用される一般的なメタ文字をいくつか紹介します。以下の例は Google アナリティクスのヘルプセンターにリンクされていますが、掲載されている情報は Looker Studio でも同様に参考にしていただけます。
ワイルドカード
。 | 任意の 1 文字(文字、数字、記号)に一致します。 | 1. 10、1A に一致 1.1 111、1A1 に一致 例 |
を構築したいとお考えですか? | 直前の文字が 0 回または 1 回出現する場合に一致します。 | 「10?」で一致するデータ: 1、10 例 |
+ | 直前の文字が 1 回以上出現する場合に一致します。 | 「10+」で一致するデータ: 10、100 例 |
* | 直前の文字が 0 回以上出現する場合に一致します。 | 「1*」で一致するデータ: 1、10 例 |
| | OR マッチを作成します。 式の末尾では使用しないでください。 |
「1|10」で一致するデータ: 1、10 例 |
アンカー
^ | 隣接する文字が文字列の先頭である場合に一致します。 | ^10 は 10、10 0、10 x に一致します。^10 は 1 10、1 10 x には一致しません。 例 |
$ | 隣接する文字が文字列の末尾である場合に一致します。 | 「10$」で一致するデータ: 1 10 、10 10 「10$」で一致しないデータ: 10 0、 10 x 例 |
グループ
( ) | 囲まれた文字が同じ順序で文字列に含まれる場合に一致します。 他の式のグループ化にも使用されます。 |
「(10)」で一致するデータ: 10 、 10 1、 10 11 ([0-9]|[a-z])は任意の数字または小文字と一致します。 例 |
[ ] | 囲まれた文字が任意の順序で文字列に含まれる場合に一致します。 | [10] は、01 2、1 20、2 10 に一致します。 例 |
- | 角かっこ内の文字範囲が文字列に含まれる場合に一致します。 | 「[0-9]」で一致するデータ: 0 ~ 9 のすべての数字 例 |
見逃し率
\\ | 隣接する文字を正規表現のメタ文字としてではなく通常の文字として解釈するよう指定します。 |
「\\」は、隣接するドットをワイルドカードとしてではなく、ピリオドや小数点として解釈することを示します。 216\\.239\\.32\\.34 は 216.239.32.34 と一致します。 例 |
文字クラス
\d | 数字(≡ [0-9]) |
\D | 非数字(≡ [^0-9]) |
\s | 空白文字(≡ [\t\n\f\r ]) |
\S | 空白文字以外(≡ [^\t\n\f\r ]) |
\w | 単語構成文字(≡ [0-9A-Za-z_]) |
\W | 非単語構成文字(≡ [^0-9A-Za-z_]) |
ヒント
シンプルな表現にする
正規表現はシンプルに作成してください。正規表現がシンプルであれば、他のユーザーが簡単に解釈して変更できます。
大文字と小文字の区別
正規表現では、デフォルトで大文字と小文字が区別されます。大文字と小文字を区別せずに一致させるには、(?i)
フラグを使用します。たとえば、次の式は「abc123」と「ABC123」の両方を抽出します。
REGEXP_EXTRACT(MyField, '(?i)(a.*)')
バックスラッシュのエスケープ
前述のとおり、バックスラッシュ(\)を使用すると、正規表現のメタ文字をエスケープして、通常の文字として扱うことができます。引用符で囲まれた文字列に含まれるバックスラッシュを通常の文字として一致させるには、バックスラッシュをエスケープする必要があります。その場合、正規表現にはバックスラッシュを 2 つ含めることになります。次に例を示します。
REGEXP_REPLACE(String, "(\\[.*\\])\\+(\\[.*\\])","\\2 \\1")
別の方法として、生の文字列のリテラル プレフィックス(R)を使用することもできます。
REGEXP_REPLACE(String, R"(\[.*\])\+(\[.*\])",R"\2 \1")