# ExtractRegEx スクリプトおよびチャート関数

ExtractRegEx() は、指定された正規表現パターンを使用して入力文字列式からテキストを抽出します。一致するものが見つからない場合、関数は null 値を返します。

この関数は、大文字と小文字を区別する正規表現操作を実行します。代わりに、バリアント ExtractRegExI() を使用して、大文字と小文字を区別しない正規表現操作を実行することもできます。

構文:

ExtractRegEx (text, regex [, field\_no])

戻り値データ型： 文字列

引数

| 引数 | 説明 |
| --- | --- |
| text | 戻り値で抽出されるテキストを含む文字列式。 |
| regex | テキストの抽出に使用する正規表現。 |
| field\_no | 抽出する一致の数。これは、テキスト内に正規表現に一致するものが複数見つかる可能性がある場合に便利です。たとえば、4 番目の一致を抽出するには、`4` の値を指定します。これはオプションの引数です。一致の順序を逆にするには、負の値を指定します。<br><br>関数がロード スクリプトまたはチャート式のどちらで使用されているかに関係なく、次の内容が適用されます。<br><br><ul> <li> <p><span>field_no</span> が正の場合、関数は左から右への一致を識別して 1 つの値を返します。</p> </li> <li> <p><span>field_no</span> が負の場合、関数は右から左への一致を識別して 1 つの値を返します。</p> </li> </ul><br><br>ロード スクリプトで関数を使用する場合:<br><br><ul> <li> <p><span>LOAD</span> ステートメントで <span>ExtractRegEx()</span> 関数を使用し、<span>field_no</span> を省略すると、関数は一致するレコードと同じ数のレコードを生成します。</p> </li> <li> <p><span>ExtractRegEx()</span> を使用して複数のフィールドがロードされ、いずれにも <span>field_no</span> 引数が指定されていない場合は、すべての組み合わせの直積が作成されます。</p> </li> </ul><br><br>チャートの数式で関数を使用する場合:<br><br><ul> <li> <p><span>field_no</span> が省略された場合、既定値は <code>1</code> となります。</p> </li> </ul> |

関数の例

| 例 | 結果 |
| --- | --- |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 1)` | 最初に見つかった一致である、`a` を返します。 |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 2)` | 2 番目に見つかった一致である、`b` を返します。 |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 4)` | 4 番目に見つかった一致である、`1` を返します。 |
| `ExtractRegEx('abc','a\|b',-1)` | `b` を返します。負の値を指定すると、一致は逆順にカウントされます。 |
| `ExtractRegEx('A,B C;1 2,3','[a-c]\|[4-9]')` | ExtractRegEx() は大文字と小文字を区別しますが、大文字と小文字を区別しないバリアントが使用されなかったため、null 値を返します。 |
| `ExtractRegExI('A,B C;1 2,3','[a-c]\|[4-9]')` | 大文字と小文字を区別しないバリアント ExtractRegExI() が使用されたため、`A` を返します。 |

## 使用に適しているケース

Extract RegEx() を使用すると、他の情報 (フリーテキストや JSON 文字列など) も含まれている可能性のあるデータから分離する情報を抽出できます。 例:

* メール アドレス、電話番号、アカウント番号、その他の情報をテキストから抽出します。

* 数値 (通貨など) をテキストから抽出します。

* テキストまたは数値データの書式設定を標準化します。

## 例 1 - JSON からメール アドレスを抽出するロード スクリプト

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegEx.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 項目 `OrderJson` を含むテーブル `OrderDetails` 。

* 項目 `OrderJson` には、注文データを含む JSON 文字列が含まれています。インデントや改行などの書式設定は JSON から削除されました。注文データには、個別の値に抽出するメール アドレスが含まれています。

* `OrderDetails` の後にロードされる新しいテーブル `EmailAddresses`。`EmailAddresses` LOAD ステートメントでは、`OrderDetails` テーブルから `OrderJson` 項目をロードし、抽出されたメール アドレスを含む新しい計算項目 `Email` を作成します。その後、`OrderDetails` は削除されます。

要件:

* 特定ドメインのメール アドレス (`example.com`)。

* 任意の数の英数字と、定義された一連の特殊文字を含むメール アドレス。

ロード スクリプト

```
OrderDetails:

Load * Inline `
OrderJson
{"Orders":[{"order_id":"12345","customer":{"name":"John Doe","email":"john.doe@example.com"},"items":{"product":"Laptop","quantity":2,"price":1200},"total_price":2400},{"order_id":"12346","customer":{"name":"Jane Doe","email":"jane.doe@example.com"},"items":{"product":"Tablet","quantity":4,"price":400},"total_price":1600},{"order_id":"12347","customer":{"name":"Amalia Craig","email":"amalia.craig@example.com"},"items":{"product":"Desktop Computer","quantity":1,"price":1900},"total_price":1900},{"order_id":"12348","customer":{"name":"Ken Roberts","email":"ken.roberts@example.com"},"items":{"product":"Phone Charger Cable","quantity":110,"price":1900},"total_price":1210}]}
` (delimiter is '\t');

EmailAddresses:

Load OrderJson, ExtractRegEx(OrderJson, '[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com') as Email Resident OrderDetails;

Drop table OrderDetails;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:

* `Email`

結果テーブル

| Email |
| --- |
| amalia.craig@example.com |
| jane.doe@example.com |
| john.doe@example.com |
| ken.roberts@example.com |

field\_no の引数値を指定しないと、すべての一致が自動的に個別の値に抽出されます。

## 例 2 - 通貨の金額から数値を抽出するロード スクリプト

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegEx.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 売上データを含むテーブル `Sales`。

* `Sales` テーブル内の `Amount` という項目には、米ドル (USD) での取引金額が含まれています。これらの金額は、通貨記号とコードを含む文字列として表現されます。

* `Sales`、`OrderAmountNumeric_USD` 内のカスタム フィールドの定義。各金額を純粋な数値として抽出します。 このデータは、チャート集計に使用できるように数値形式にする必要があります。

ロード スクリプト

```
SET DateFormat='MM-DD-YYYY';

Sales:

Load ExtractRegEx(Amount, '[0-9]+.[0-9]{2}') as OrderAmountNumeric_USD, * Inline `

OrderID, OrderDate, Product, Amount
1, '12-27-2024', Software, $100.31 USD
2, '12-28-2024', Electronics, $513.93 USD
3, '12-29-2024', Grocery, $34.66 USD
4, '12-30-2024', Furniture, $1124.58 USD
5, '12-31-2024', Software, $95.95 USD
6, '01-01-2025', Software, $601.00 USD
7, '01-02-2025', Grocery, $1534.20 USD
8, '01-03-2025', Produce, $51.49 USD
9, '01-04-2025', Home Improvement, $176.12 USD
10, '01-05-2025', Produce, $432.77 USD
11, '01-06-2025', Software, $270.01 USD
12, '01-07-2025', Electronics, $83.85 USD
13, '01-08-2025', Furniture, $65.65 USD
14, '01-09-2025', Electronics, $1526.39 USD
15, '01-10-2025', Software, $432.44 USD
16, '01-11-2025', Furniture, $888.15 USD
17, '01-12-2025', Furniture, $300.00 USD
18, '01-13-2025', Grocery, $109.53 USD
19, '01-14-2025', Furniture, $487.97 USD
20, '01-15-2025', Software, $65.09 USD
`;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:

* `OrderID`

* `Amount`

* `OrderAmountNumeric_USD`

結果テーブル

| OrderID | Amount | OrderAmountNumeric\_USD |
| --- | --- | --- |
| 1 | $100.31 USD | 100.31 |
| 2 | $513.93 USD | 513.93 |
| 3 | $34.66 USD | 34.66 |
| 4 | $1124.58 USD | 1124.58 |
| 5 | $95.95 USD | 95.95 |
| 6 | $601.00 USD | 601.00 |
| 7 | $1534.20 USD | 1534.20 |
| 8 | $51.49 USD | 51.49 |
| 9 | $176.12 USD | 176.12 |
| 10 | $432.77 USD | 432.77 |
| 11 | $270.01 USD | 270.01 |
| 12 | $83.85 USD | 83.85 |
| 13 | $65.65 USD | 65.65 |
| 14 | $1526.39 USD | 1526.39 |
| 15 | $432.44 USD | 432.44 |
| 16 | $888.15 USD | 888.15 |
| 17 | $300.00 USD | 300.00 |
| 18 | $109.53 USD | 109.53 |
| 19 | $487.97 USD | 487.97 |
| 20 | $65.09 USD | 65.09 |

## 例 3 - JSON からメール アドレスを抽出するためのチャートの数式

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegEx.htm)

#### チャートの数式と結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 項目 `OrderJson` を含むテーブル `OrderDetails` 。

* 項目 `OrderJson` には、注文データを含む JSON 文字列が含まれています。インデントや改行などの書式設定は JSON から削除されました。注文データには、個別の値に抽出するメール アドレスが含まれています。

要件:

* 特定ドメインのメール アドレス (`example.com`)。

* 任意の数の英数字と、定義された一連の特殊文字を含むメール アドレス。

ロード スクリプト

```
OrderDetails:

Load * Inline `
OrderJson
{"Orders":[{"order_id":"12345","customer":{"name":"John Doe","email":"john.doe@example.com"},"items":{"product":"Laptop","quantity":2,"price":1200},"total_price":2400},{"order_id":"12346","customer":{"name":"Jane Doe","email":"jane.doe@example.com"},"items":{"product":"Tablet","quantity":4,"price":400},"total_price":1600},{"order_id":"12347","customer":{"name":"Amalia Craig","email":"amalia.craig@example.com"},"items":{"product":"Desktop Computer","quantity":1,"price":1900},"total_price":1900},{"order_id":"12348","customer":{"name":"Ken Roberts","email":"ken.roberts@example.com"},"items":{"product":"Phone Charger Cable","quantity":110,"price":1900},"total_price":1210}]}
` (delimiter is '\t');
```

結果

データをロードしてシートを開きます。テーブルを作成し、次の各数式を計算軸として追加します。

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',1)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',2)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',3)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',4)`

結果テーブル

| =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',1) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',2) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',3) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',4) |
| --- | --- | --- | --- |
| john.doe@example.com | jane.doe@example.com | amalia.craig@example.com | ken.roberts@example.com |

## 詳細を見る

* [ロード スクリプトとチャートの数式での正規表現の使用](https://help.qlik.com/ja-JP/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)