REGEXFIND( ) 関数

正規表現で指定されたパターンが文字列内に現れるかどうかを示す論理値を返します。

構文

REGEXFIND(文字列, パターン)

パラメーター

名前 種類 説明
文字列

文字

パターンとの一致をテストするフィールド、式、またはリテラル値。
パターン

文字

検索するパターン文字列(正規表現)。

パターンには、リテラル文字、メタ文字、またはこれら 2 つの組み合わせを指定できます。リテラル文字には、すべての英数字、一部の句読点、および空白が含まれます。

検索は大文字と小文字を区別します。つまり、英字の大文字と小文字は明確に指定しなければならないということです。

出力

論理。指定されたパターンの値が見つかった場合は T(true)、そうでない場合は F(false)を返します。

基本的な例

英字のパターン

次の例では、Vendor_City フィールドの値が "Phoenix"、"Austin"、または "Los Angeles" であるすべてのレコードに対し、T が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Vendor_City, "Phoenix|Austin|Los Angeles")

次の例では、ラスト ネームが "John" または "Jon" で始まるすべてのレコードに対し、T が返されます。たとえば、Jon、Johnson、Johnston、Jonson、Jonston、Jones などが該当します。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Last_Name,"^Joh?n")

次の例では、ラスト ネームが "John" または "Jon" であるすべてのレコードに対してのみ、T が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Last_Name,"^Joh?n\b")

数値文字のパターン

次の例では、請求書番号に "98" を含んでいるすべてのレコードに対し、T が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Invoice_Number, "98")

次の例では、請求書番号が "98" で始まるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Invoice_Number, "\b98")

次の例では、請求書番号が "98" で終わるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Invoice_Number, "98\b")

次の例では、請求書番号の左端から 5 桁目と 6 桁目に "98" を含んでいるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Invoice_Number, "\b\d\d\d\d98")
REGEXFIND(Invoice_Number, "\b\d{4}98")

文字が混在するパターン

次の例では、製品コードが 3 つの数字、1 つのハイフン、6 つの文字の順になっているすべてのレコードに対し、T が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Product_Code, "\b\d{3}-[a-zA-Z]{6}\b")

次の例では、製品コードが 3 つ以上の数字、1 つのハイフン、6 つ以上の文字の順になっているすべてのレコードに対し、T が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Product_Code, "\b\d{3,}-[a-zA-Z]{6}")

次の例では、英数字の請求書番号の左端から 5 桁目と 6 桁目に "98" を含んでいるすべてのレコードに対し、T が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Invoice_Number, "\b\w{4}98")

次の例では、請求書番号に次の文字をすべて含んでいるすべてのレコードに対し、T が返されます。それ以外のレコードに対しては F が返されます。

  • 左端から 4 桁目までに任意の文字
  • 左端から 5 桁目と 6 桁目に "98"
REGEXFIND(Invoice_Number, "\b.{4}98")

次の例では、請求書番号に "98" を含んでおり、その前に 1 ~ 4 文字があるすべてのレコードに対し、T が返されます。それ以外のレコードに対しては 'F' が返されます。

REGEXFIND(Invoice_Number, "\b.{1,4}98")

次の例では、請求書番号に次の文字をすべて含んでいるすべてのレコードに対し、T が返されます。それ以外のレコードに対しては F が返されます。

  • 左端から 3 桁目までに任意の文字
  • 左端から 4 桁目に "5" または "6"
  • 左端から 5 桁目と 6 桁目に "98"
REGEXFIND(Invoice_Number, "\b.{3}[56]98")

次の例では、請求書番号の次の文字をすべて含んでいるすべてのレコードに対し、T が返されます。それ以外のレコードに対しては F が返されます。

  • 左端から 2 桁目までに任意の文字
  • 左端から 3 桁目と 4 桁目に "55" または "56"
  • 左端から 5 桁目と 6 桁目に "98"
REGEXFIND(Invoice_Number, "\b.{2}(55|56)98")

備考

機能の仕組み

REGEXFIND( ) 関数は正規表現を使って Analytics でデータを検索します。

正規表現は、さまざまな検索操作を実行する特殊文字であるメタ文字と、リテラル文字を組み合わせた、強力で柔軟性のある検索文字列です。

例:

REGEXFIND(Last_Name,"Sm(i|y)the{0,1}")

これはグループ ( )、交替 |、量指定子 { } のメタ文字を使用して、Last_Name フィールド内から "Smith"、"Smyth"、"Smithe"、または "Smythe" を見つけるための正規表現を作成しています。

照合は順次実行される

文字列の値とパターンの値との照合は、順次実行されます。上記の例:

  • "S" が Last_Name フィールドの左端から 1 桁目と照合される
  • "m" が 2 桁目と照合される
  • "i" と "y" が 3 桁目と照合される
  • "t" が 4 桁目と照合される
  • "h" が 5 桁目と照合される
  • "e" が 6 桁目と照合される(照合対象に 6 桁目が存在する場合)

REGEXFIND( ) の使用に適する場面

REGEXFIND( ) は、シンプルまたは複雑なパターン一致を使ってデータを検索する場合に使用できます。

正規表現の構文を見るのは初めてである場合は特に、正規表現の作成は難しいかもしれません。より単純な FIND( )、MATCH( )、または MAP( ) などの Analytics 検索関数を使用して、検索の目的を達成できる可能性もあります。

検索要件がこれらの単純な関数の能力を超えている場合は、正規表現を使用することで、検索文字列の作成にほぼ無制限の柔軟性を与えられます。

REGEXFIND( ) によるスペースの扱い

スペース(空白)は、文字列パターンのどちらに指定した場合でも文字として扱われるので、スペースを扱う際には注意が必要です。

パターンに空白を空白そのものとして指定するには、スペースを入力するか、またはメタ文字の \s を使用します。メタ文字を使用すると、特に複雑なパターンを指定する場合に、パターン内のスペースが読みやすくなるため、見落とされにくくなります。

フィールドの連結

同時に複数のフィールドにわたって検索したい場合は、2 つ以上のフィールドを連結して文字列に指定することができます。

例:

REGEXFIND(Vendor_Name+Vendor_Street,"Hardware.*Main")

Vendor_NameVendor_Street の両方のフィールドで、"Hardware" と "Main" という単語間に 0 個以上の文字が入っているパターンを検索します。

名前に "Hardware" という単語を含み、"Main" という通り沿いに立地する企業は、この正規表現に一致します。"Hardware on Main" という企業(名)は一致します。

連結したフィールドは 1 つのフィールドのように扱われます。ただし、ALLTRIM( ) 関数を使用して個々のフィールドからスペースを除去しなければ、各フィールドの先頭と末尾のスペースを含むフィールドとなります。

連結するフィールド間の順序は重要

REGEXFIND( ) は、パターン内の文字を指定された順序で検索するため、フィールドを連結する順序は検索に影響を与えます。上の式で Vendor_NameVendor_Street を逆にした場合、得られる結果が少なくなる可能性があります。

正規表現のメタ文字

次の表は、REGEXFIND( ) および REGEXREPLACE( ) で使用できるメタ文字の一覧と、それぞれのメタ文字で実行される操作を示しています。

このほかの正規表現構文もあって、 Analytics でサポートされていますが、もっと複雑です。それらの構文の完全な説明はこのガイドには記載されていません。正規表現について説明している多数のリソースがインターネットで入手できます。

Analytics は、ECMAScript の正規表現の実装を使用しています。ほとんどの正規表現の実装は、共通のコア構文を使用しています。

メモ

Analytics における現在の正規表現の実装は、英語以外の言語の検索を完全にサポートしていません。

メタ文字

説明

.

任意の 1 文字に一致します(改行文字を除く)。

?

直前のリテラル、メタ文字、または要素と 0 回または 1 回一致します。

*

直前のリテラル、メタ文字、または要素と 0 回以上一致します。

+

直前のリテラル、メタ文字、または要素と 1 回以上一致します。

{}

直前のリテラル、メタ文字、または要素と指定した回数一致します。正確な数、範囲、または終わりが決められていない範囲を指定できます。

例:

  • a{3} は "aaa" と一致します。

  • X{0,2}L は "L"、"XL"、および "XXL" と一致します。

  • AB-\d{2,}-YZ は、英数字の識別子で、接頭辞に "AB-"、接尾辞に "-YZ"、および本体部分に 2 つ以上の数字を持つすべての識別子と一致します。

[]

角かっこで囲まれた文字の中のいずれかに一致します。

例:

  • [aeiou] は a、e、i、o、または u と一致します。

  • [^aeiou] は a、e、i、o、または u 以外の文字と一致します。

  • [A-G] は大文字の英字 A から G の範囲にある任意の文字と一致します。

  • [A-Ga-g] は大文字の英字 A から G、または小文字の英字 a から g の範囲にある任意の文字と一致します。

  • [5-9] は 5 から 9 の範囲にある任意の数字と一致します。

()

文字の並びまたはブロックを定義するグループを作成します。その後、グループは単一ユニットとして扱うことができます。

例:

  • S(ch)?mid?th? これは、"Smith" または "Schmidt" と一致します。

  • (56A.*){2} は、"56A" の並びが少なくとも 2 回出現するすべての英数字の識別子と一致します。

  • (56A).*-.*\1 は、"56A" の並びが少なくとも 2 回出現し、2 つの出現の間にハイフンがあるすべての英数字の識別子と一致します。

\

エスケープ文字は、直後の文字がリテラルであることを示します。メタ文字と文字どおり一致させたい場合は、エスケープ文字を使用します。たとえば、\( は左かっこを見つけ、\\ はバックスラッシュを見つけます。

次の文字のいずれかと完全に一致させたい場合は、エスケープ文字を使用します。

^ $ . * + ? = ! : | \ ( ) [ ] { }

アンパサンド(&)やアットマーク(@)などの他の句読点文字は、エスケープ文字を必要としません。

\int

前にかっこ ( ) を使って定義したグループを繰り返し使用することを指定します。int は、前に定義したグループの、その他のグループからの位置(先頭から数える)を特定する整数です。このメタ文字は、REGEXFIND( ) と REGEXREPLACE( ) いずれのパターン パラメーターでも使用できます。

例:

  • (123).*\1 は、数字 "123" のグループが少なくとも 2 回出現するすべての識別子と一致します。

  • ^(\d{3}).*\1 は、先頭の 3 桁の数字が繰り返し現れるすべての識別子と一致します。

  • ^(\d{3}).*\1.*\1 は、先頭の 3 桁の数字が繰り返し少なくとも 2 回現れるすべての識別子と一致します。

  • ^(\D)(\d)-.*\2\1 は、先頭の英字と数字が反転して再び現れるすべての識別子と一致します。

$int

ターゲット文字列で見つかったグループが置換文字列として使用されることを指定します。int は、対象文字列における、そのグループの、その他のグループからの位置(先頭から数える)を特定する整数です。このメタ文字は、REGEXREPLACE( ) の新しい文字列パラメーターで使用できます。

例:

  • さまざまな電話番号の表示形式と一致させるために (\d{3})[ -]?(\d{3})[ -]?(\d{4}) というパターンを使用している場合、新しい文字列として ($1)-$2-$3 を使用すると、それ自体を数字と置き換えて、表示形式を標準化することができます。999 123-4567 と 9991234567 はどちらも (999)-123-4567 になります。

|

パイプ(|)の前後にある文字、文字のブロック、または式と一致します。

例:

  • a|b は a または b と一致します。

  • abc|def は "abc" または "def" と一致します。

  • Sm(i|y)th は "Smith" または "Smyth" と一致します。

  • [a-c]|[Q-S]|[x-z] は a、b、c、Q、R、S、x、y、z のいずれかの文字と一致します。

  • \s|- は空白文字またはハイフンと一致します。

\w

単語に使用される任意の文字と一致します(a から z、A から Z、0 から 9、およびアンダースコア _)。

\W

単語に使用される文字以外の任意の文字と一致します(a から z、A から Z、0 から 9、またはアンダースコア _ 以外)。

\d

任意の数字(10 進数字)と一致します。

\D

10 進数字以外の任意の 1 文字と一致します。

\s

スペース(空白文字)と一致します。

\S

空白文字以外の任意の文字と一致します。

\b

単語の境界(\w 文字と \W 文字の間)と一致します。

単語の境界自体に領域は取りません。例:

  • "United Equipment" には単語の境界が 4 つあります。スペースの左右に 1 つずつと、文字列のはじめと終わりに 1 つずつです。"United Equipment" は、正規表現 \b\w*\b\W\b\w*\b と一致します。

ヒント

単語の境界は、単語を区切るスペース以外の、カンマやピリオドなどの文字によっても区切ることができます。

たとえば、次の式は True と評価されます。

REGEXFIND("jsmith@example.net", "\bexample\b")

^

文字列の先頭と一致します。

角かっこ [ ] 内では、^ は指定内容の否定になります。

$

文字列の末尾と一致します。

関連する関数

一致パターンを検索、置換したい場合は、REGEXREPLACE( ) 関数 を使用します。

ACL のスクリプト作成ガイド 14.1