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

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

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

構文:

SubFieldRegEx (text, regex\_delimiter [, field\_no])

戻り値データ型： 文字列

引数

| 引数 | 説明 |
| --- | --- |
| text | 正規表現パターンを検索する入力文字列テキスト。 |
| regex\_delimiter | 区切り文字として使用する正規表現を含む文字列式。`\|` (バーティカル バー) 文字で区切ることで、同じ正規表現パターン内に複数の区切り文字を指定できます。 |
| 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>SubFieldRegEx()</span> 関数を使用し、<span>field_no</span> を省略すると、関数は一致するレコードと同じ数のレコードを生成します。</p> </li> <li> <p><span>SubFieldRegEx()</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> |

関数の例

| 例 | 結果 |
| --- | --- |
| `SubFieldRegEx('a,b c;1 2,3',' \|,\|;', 1)` | `a`<br>を返します。この例では、3 つの区切り文字 (スペース、カンマ、セミコロン) が指定されています。 |
| `SubFieldRegEx('a;b;c;1;2;3',';', 2)` | `b`<br>を返します。この場合、指定される区切り文字は 1 つのみです (セミコロン)。 |
| `SubFieldRegEx('a,b c;1 2,3',' \|,\|;', 4)` | `1`<br>を返します。 |

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

SubFieldRegEx() を使用すると、区切られたリストから複数の個別の値を抽出できます。たとえば、自然言語の大きなブロック内にカンマ区切りのリストが含まれている場合、この関数を使用して、リストの各値をデータ モデル内の新しいレコードに分離できます。

## 例 1 - トランザクションごとにタグを分離するロード スクリプト

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

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

概要

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

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

* 最初にトランザクション データが含まれるテーブル `Transaction_By_Tag`。このデータは処理され、個々のタグ値が新しいレコードに抽出されます。

* 抽出されたタグの値を格納する項目、`TransactionTag` の作成。

トランザクション タグを含む項目には、区切り文字で区切られたテキスト文字列内に複数のタグが含まれます。区切り文字には、次のいずれかの文字を使用できます。 , | ;

ロード スクリプト

```
Transaction_By_Tag:

Load SubFieldRegEx(Tags, ',|;|\|') as TransactionTag,
* Inline [
ID	Product	Tags	Amount
1	Product A	Special order,Eligible for return,Warranty included	100.93
2	Product B	Ineligible for return|No warranty available	51.11
3	Product C	No warranty available	12.83
4	Product B	Special order;Liquidation sale;Warranty included	209.48
] (delimiter is '\t');

drop fields Tags;
```

結果

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

* `ID`

* `Product`

* `TransactionTag`

結果テーブル

| ID | Product | TransactionTag |
| --- | --- | --- |
| 1 | Product A | Eligible for return |
| 1 | Product A | Warranty included |
| 1 | Product A | Special order |
| 2 | Product B | No warranty available |
| 2 | Product B | Ineligible for return |
| 3 | Product C | No warranty available |
| 4 | Product B | Liquidation sale |
| 4 | Product B | Special order |
| 4 | Product B | Warranty included |

この例では、ロード スクリプトで使用すると、SubFieldRegEx() が入力文字列で見つかった一致ごとに個別の行を返すことを示しています。

## 例 2 - トランザクションごとにタグを分けるチャートの数式

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

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

概要

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

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

* トランザクション データが含まれるテーブル `Transaction_By_Tag`。

* トランザクションに関連付けられたすべてのタグを格納するためのテキスト文字列を含む項目 `Tags`。

要件:

* トランザクション タグを含む項目には、区切り文字で区切られたテキスト文字列内に複数のタグが含まれます。区切り文字には、次のいずれかの文字を使用できます。 , | ;

* チャートの数式を使用して、各タグを独自の項目に分離し、トランザクションに最大 3 つのタグを追加できるようにします。

ロード スクリプト

```
Transaction_By_Tag:

Load * Inline [
ID	Product	Tags	Amount
1	Product A	Special order, Eligible for return, Warranty included	100.93
2	Product B	Ineligible for return | No warranty available	51.11
3	Product C	No warranty available	12.83
4	Product B	Special order;Liquidation sale;Warranty included	209.48
] (delimiter is '\t');
```

結果

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

* `ID`

* `Tags`

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

* 

  `=SubFieldRegEx(Tags, ',|;|\|', 1)`

* 

  `=SubFieldRegEx(Tags, ',|;|\|', 2)`

* 

  `=SubFieldRegEx(Tags, ',|;|\|', 3)`

結果テーブル

| ID | Tags | =SubFieldRegEx(Tags, ',\|;\|\\|', 1) | =SubFieldRegEx(Tags, ',\|;\|\\|', 2) | =SubFieldRegEx(Tags, ',\|;\|\\|', 3) |
| --- | --- | --- | --- | --- |
| 1 | Special order, Eligible for return, Warranty included | Special order | Eligible for return | Warranty included |
| 2 | Ineligible for return \| No warranty available | Ineligible for return | No warranty available | - |
| 3 | No warranty available | No warranty available | - | - |
| 4 | Special order;Liquidation sale;Warranty included | Special order | Liquidation sales | Warranty included |

## 詳細を見る

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