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

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

LOAD ステートメントで ExtractRegExGroup() 関数を使用し、field\_no を省略すると、関数は複数のレコードを返します。ExtractRegExGroup() を使用して複数の項目をロードすると、すべての組み合わせの直積が作成されます。

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

構文:

ExtractRegExGroup (text, regex, group [, field\_no])

戻り値データ型： 文字列

引数

| 引数 | 説明 |
| --- | --- |
| text | 戻り値で抽出されるテキストを含む文字列式。 |
| regex | テキストの抽出に使用する正規表現。 |
| group | 複合正規表現の場合のグループの数。<br><br>正規表現にグループが 1 つだけ含まれている場合は、代わりに ExtractRegEx() 関数を使用します。または、`0` の group 値で ExtractRegExGroup() を使用します。<br><br>負の group 値を指定すると、一致を右から左に検索できます。 |
| field\_no | 抽出する一致の数。これは、テキスト内に正規表現に一致するものが複数見つかる可能性がある場合に便利です。たとえば、4 番目の一致を抽出するには、`4` の値を指定します。<br><br>これはオプションの引数です。指定されていない場合、既定は 1 です。 |

関数の例

| 例 | 結果 |
| --- | --- |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1)` | `abc` (最初の一致の最初のグループ) を返します。 |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1,2)` | `def` (2 番目の一致の最初のグループ) を返します。 |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2)` | `123` (最初の一致の 2 番目のグループ) を返します。 |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2,2)` | `456` (2 番目の一致の 2 番目のグループ) を返します。 |

## ExtractRegExGroup の使用目的

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

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

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

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

## 例 1 - トランザクションコードを解析するロード スクリプト

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

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

概要

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

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

* トランザクションに関する情報が含まれる `Transactions` という名前のテーブル。特定の詳細は、次の構文を使用してトランザクション コードでキャプチャされます。

  トランザクションの年 - トランザクション ソース (オンラインまたは店頭での購入) - 関連配送センター

* 各詳細を抽出するために、同じ複合正規表現を再利用して複数の新しい項目を作成します。

要件:

* 年は 4 つの数字の任意の組み合わせで表すことができます。

* トランザクション ソースとして許容される値は ONLINE と INSTORE のみです。

* 配送センターには、正確な 5 つの数字が必要です。

ロード スクリプト

```
Transactions:

Load 
	recno() as RecordID,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',0) as TransactionCode_Unparsed,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',1) as TransactionYear,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',2) as TransactionSource,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',3) as TransactionDC,
* Inline `
TransactionCode, Category
2025-ONLINE-60019, Product A
2024-INSTORE-60020, Product B
2025-ONLINE-60018, Product C
2024-ONLINE-60020, Product A
2025-INSTORE-60019, Product B
2025-ONLINE-60017, Product D
`;
```

結果

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

* `RecordID`

* `TransactionCode`

* `TransactionCode_Unparsed`

* `TransactionYear`

* `TransactionSource`

* `TransactionDC`

結果テーブル

| RecordID | TransactionCode | TransactionCode\_Unparsed | TransactionYear | TransactionSource | TransactionDC |
| --- | --- | --- | --- | --- | --- |
| 1 | 2025-ONLINE-60019 | 2025-ONLINE-60019 | 2025 | ONLINE | 60019 |
| 2 | 2024-INSTORE-60020 | 2024-INSTORE-60020 | 2024 | INSTORE | 60020 |
| 3 | 2025-ONLINE-60018 | 2025-ONLINE-60018 | 2025 | ONLINE | 60018 |
| 4 | 2024-ONLINE-60020 | 2024-ONLINE-60020 | 2024 | ONLINE | 60020 |
| 5 | 2025-INSTORE-60019 | 2025-INSTORE-60019 | 2025 | INSTORE | 60019 |
| 6 | 2025-ONLINE-60017 | 2025-ONLINE-60017 | 2025 | ONLINE | 60017 |

これらの結果は、group 引数によって、1 つの正規表現を複数の操作に再利用できることを示しています。0 の group 値を使用する `TransactionCode_Unparsed` 項目はこの場合追加の値を提供しませんが、関数を示す目的でここに示されています。

## 例 2 - ビジネスの連絡先情報を抽出するロード スクリプト

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

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

概要

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

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

* 各企業のウェブサイトに掲載されている企業情報が含まれる `BusinessContactInfo` という名前のテーブル。

* `ContactInfo` は、会社のメール アドレスや電話番号などのフリー テキストを含む項目です。

* 各詳細を抽出するために、同じ複合正規表現を再利用して複数の新しい項目を作成します。

要件:

* メール アドレスは、特定の要件と構文を満たしている必要があります。

* 電話番号は 10 桁の NANP 電話番号である必要があります。市外局番を括弧で囲み、特定の場所に空白とハイフンを使用できるようにします。

ロード スクリプト

```
BusinessContactInfo:

Load
	ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1) as CompanyEmail,
	ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2) as CompanyPhoneNum,
* Inline `
ID	CompanyName	ContactInfo
1	Company A	Email is: Company1@example.com, Phone number is: (123) 456-7890
2	Company B	Email is: company2@test.com, Phone # is: 0123456790
3	Company C	Email is: company3@placeholder.com, Phone no. is: 234-567-8901

` (delimiter is '\t');
```

結果

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

* `CompanyName`

* `CompanyEmail`

* `CompanyPhoneNum`

結果テーブル

| CompanyName | CompanyEmail | CompanyPhoneNum |
| --- | --- | --- |
| Company A | Company1@example.com | (123) 456-7890 |
| Company B | company2@test.com | 0123456790 |
| Company C | company3@placeholder.com | 234-567-8901 |

同じ複合正規表現を再利用して、異なる情報を取得します。引数 group は、正規表現の 2 つのグループのうちどちらを検索するかを指定し、引数 field\_no は、検索する全体的な一致 (文字列全体にわたって) を指定します。

関数の ExtractRegEGroupxI() バリアントは、大文字と小文字を区別せずに検索できます。

## 例 3 - ISBN コードからコンポーネントを抽出するロード スクリプト

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

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

概要

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

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

* すべての抽出に使用する正規表現を格納する変数、`ISBN_RegEx` の作成。
* 書店が複数のサプライヤーから注文する書籍の ISBN コードのセット。

各 ISBN コードから次の情報を抽出する必要があります。

* EAN

* グループ

* 登録者

* 出版

* チェックサム

ロード スクリプト

```
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';

ISBN:
LOAD Supplier,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',5) AS Checksum;
// Split the ISBN with the Group function in a preceding load to avoid generating a cartesian product
LOAD *,
ExtractRegEx(SupplierBooks, '$(ISBN_RegEx)') AS Books
INLINE [
Supplier, SupplierBooks
Supplier 1, ISBN 123-3-1234-1234-0 ISBN 012-2-0123-0123-4 ISBN 000-1-0123-0123-2 ISBN 234-5-2345-2345-1 ISBN 555-2-5555-5555-3 ISBN 222-4-2222-2222-2
Supplier 2, ISBN 000-0-3333-3333-3 ISBN 333-3-3333-3333-3 ISBN 555-1-5151-5151-3 ISBN 232-1-2323-2323-1 ISBN 008-0-7777-7777-3 ISBN 888-0-9999-0000-0
];
```

結果

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

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

結果テーブル

| Supplier | EAN | Group | Registrant | Publication | Checksum |
| --- | --- | --- | --- | --- | --- |
| Supplier 1 | 000 | 1 | 0123 | 0123 | 2 |
| Supplier 1 | 012 | 2 | 0123 | 0123 | 4 |
| Supplier 1 | 123 | 3 | 1234 | 1234 | 0 |
| Supplier 1 | 222 | 4 | 2222 | 2222 | 2 |
| Supplier 1 | 234 | 5 | 2345 | 2345 | 1 |
| Supplier 1 | 555 | 2 | 5555 | 5555 | 3 |
| Supplier 2 | 000 | 0 | 3333 | 3333 | 3 |
| Supplier 2 | 008 | 0 | 7777 | 7777 | 3 |
| Supplier 2 | 232 | 1 | 2323 | 2323 | 1 |
| Supplier 2 | 333 | 3 | 3333 | 3333 | 3 |
| Supplier 2 | 555 | 1 | 5151 | 5151 | 3 |
| Supplier 2 | 888 | 0 | 9999 | 0000 | 0 |

## 例 4 - ビジネス連絡先情報を抽出するチャートの数式 (ExtractRegEx() との比較)

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

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

概要

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

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

* 各企業のウェブサイトに掲載されている企業情報が含まれる BusinessContactInfo という名前のテーブル。

* ContactInfo は、会社のメール アドレスや電話番号などのフリー テキストを含む項目です。チャートの数式を使用して、それぞれのメール アドレスと電話番号を抽出します。

要件:

* メール アドレスは、特定の要件と構文を満たしている必要があります。

* 電話番号は 10 桁の NANP 電話番号である必要があります。市外局番を括弧で囲み、特定の場所に空白とハイフンを使用できるようにします。

ロード スクリプト

```
BusinessContactInfo:

Load * Inline `
ID	CompanyName	ContactInfo
1	Company A	Email is: Company1@example.com, Phone number is: (123) 456-7890
2	Company B	Email is: company2@test.com, Phone # is: 0123456790
3	Company C	Email is: company3@placeholder.com, Phone no. is: 234-567-8901

` (delimiter is '\t');
```

結果

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

* CompanyName

次の計算軸をテーブルに追加します。

* 

  ```
  =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1)
  ```

* 

  ```
  =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2)
  ```

結果テーブル

| CompanyName | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&\*\-\_+=~{\|}\/.'']{1,50})\|(\({0,1}[0-9]{3}\){0,1}[ -]\*[0-9]{3}[ -]\*[0-9]{4})',1,1) | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&\*\-\_+=~{\|}\/.'']{1,50})\|(\({0,1}[0-9]{3}\){0,1}[ -]\*[0-9]{3}[ -]\*[0-9]{4})',2,2) |
| --- | --- | --- |
| Company A | Company1@example.com | (123) 456-7890 |
| Company B | company2@test.com | 0123456790 |
| Company C | company3@placeholder.com | 234-567-8901 |

同じ複合正規表現を再利用して、異なる情報を取得します。引数 group は、正規表現の 2 つのグループのうちどちらを検索するかを指定し、引数 field\_no は、検索する全体的な一致 (文字列全体にわたって) を指定します。

関数の ExtractRegEGroupI() バリアントは、大文字と小文字を区別せずに検索できます。

## 例 5 - URL の解析 (ExtractRegEx() との比較)

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

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

概要

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

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

* Correspondenceという名前のテーブル。EmailBody という名前の項目にメール メッセージのテキストが含まれています。

* ウェブ URL を含むメール メッセージの内容。

2 番目の URL が存在する場合は、次のコンポーネントに抽出します。

* 完全な URL

* プロトコル

* ドメイン

* パス

すべての抽出を制御するために 1 つの正規表現を使用します。

ロード スクリプト

```
Correspondence:

Load * Inline `
ID	EmailBody
1	Thanks again for this morning's meeting! You can find the meeting minutes posted here: https://example.com/resourceexample. If you still have any questions, always feel free to ask me or one of the other team members. Here are a few learning resources that might help you: http://www.example.ca/training1.pptx http://www.example.ca/training2.pptx http://www.example.ca/training3.pptx Thanks again!
2	Hi, you'll want to visit our company website for that, it's available at https://www.example.se.
3	Hello all, I just wanted to let you know that our online stores are now up and running! I couldn't be more excited. We are already seeing quite a bit of traffic and volume sold, which is very promising! For Product A, go to https://www.examplestore1.com/products. For Product B, you'll want go to https://www.examplestore2.com/products. Product C, go check out https://www.examplestore3.com/products. Cheers!

` (delimiter is '\t');
```

結果

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

* ID

次の計算軸を追加します。

* URL 2:

  ```
  =ExtractRegEx(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2)
  ```

* URL 2 プロトコル:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',1,2)
  ```

* URL 2 ドメイン:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2,2)
  ```

* URL パス:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',6,2)
  ```

結果テーブル

| ID | URL 2 | URL 2 プロトコル | URL 2 ドメイン | URL パス |
| --- | --- | --- | --- | --- |
| 1 | http://www.example.ca/training1.pptx | http | www.example.ca | /training1.pptx |
| 2 | - | - | - | - |
| 3 | https://www.examplestore2.com/products | https | www.examplestore2.com | /products |

ExtractRegEx() は URL 全体を返しますが、ExtractRegExGroup() は使用した group の値に対応する URL の個々の部分を返します。ID 値が 2 のレコードには URL が 1 つしか含まれていないため、データは返されません。

すべてのチャートの数式で同じ正規表現が使用され、さまざまな情報が返されます。正規表現で定義されるグループの内訳は次のとおりです。

正規表現のグループ

| グループ番号 | 正規表現 | URL 部分 |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | プロトコル |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | ドメイン (グループ 3、4、5) |
| 3 | ([a-zA-Z0-9]+\.)\* | ルート ドメイン |
| 4 | ([a-zA-Z0-9]+) | トップレベル ドメイン |
| 5 | ([a-zA-Z0-9]+) | パス (グループ 7、8、9、10)(オプション) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | サブディレクトリ |
| 7 | (\/[a-zA-Z0-9]+)\* | ファイル (グループ9、10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | ファイル |
| 9 | ([a-zA-Z0-9]+) | ファイル名 |
| 10 | (\.[a-zA-Z0-9]+)? | ファイル拡張子 (オプション) |

## 詳細を見る

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