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

ReplaceRegEx() は、入力文字列と指定された正規表現パターン間の 1 つ以上の一致を置き換えた文字列を返します。一致するテキストを置き換えるテキストは、to\_str 引数で指定されます。関数は左から右に動作しますが、負の occurrence 値を指定すると、関数は右から左に読み取られます。

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

[ReplaceRegEx - Script syntax and chart functions](https://play.vidyard.com/1STBZFJeqoouP4SSofdb5R)

構文:

ReplaceRegEx (text, regex, to\_str [, occurrence])

戻り値データ型： 文字列

引数

| 引数 | 説明 |
| --- | --- |
| text | to\_str からの新しいテキストで完全にまたは部分的に置き換える入力文字列テキスト。 |
| regex | テキストをいつ置き換えるかを定義する正規表現。この引数と text 引数の一致は置き換えられます。 |
| to\_str | text の既存のコンテンツを置き換えるために使用する新しいテキスト。 |
| occurrence | 新しいテキストに置き換える一致数 (入力テキストと正規表現の間)。<br><br>これはオプションの引数です。省略した場合の既定は 0 です。値 0 が使用されるか、引数が省略された場合、text と regex 間のすべての一致は to\_str に置き換えられます。<br><br>occurrence に負の値を指定すると、一致を右から左に識別できます。 |

関数の例

| 例 | 結果 |
| --- | --- |
| `ReplaceRegEx('abc123','[0-9]','x')` | `abcxxx` を返します。この例では、正規表現パターンに一致する入力文字列のすべてのテキストが新しいテキストに置き換えられます。 |
| `ReplaceRegEx('abc123','[0-9]','x',1)` | `abcx23` を返します。入力文字列と正規表現パターンの間で最初に一致した部分のみが置き換えられます。 |
| `ReplaceRegEx('abc123','[0-9]','x',4)` | `abc123` を返します。入力文字列と正規表現パターンの間には一致する可能性のあるものは 3 つだけなので、変更は実行されません。 |
| `ReplaceRegEx('ABC123','[a-c]','5')` | `ABC123` を返します。ReplaceRegEx() は大文字と小文字を区別するため変更は実行されず、大文字と小文字を区別しないバリアントは使用されません。 |
| `ReplaceRegExI('ABC123','[a-c]','5')` | `555123` を返します。関数の大文字と小文字を区別しないバリアント ReplaceRegExI() が使用されます。 |

## ReplaceRegEx の使用目的

特にデータ内に複雑なパターンが存在する場合、ReplaceRegEx() を使用してテキストを変更し、書式設定やコンプライアンス標準を満たすことができます。たとえば、電話番号の文字列を再フォーマットして、数値のみが含まれるようにすることができます。

必要に応じて、この関数を使用して、個人を特定できる情報 (PII) などの機密情報をマスクし、アプリケーションを分析するユーザーに表示されないようにすることもできます。

## 例 1 - 従業員のメール アドレスを更新するロードスクリプト

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

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

概要

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

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

* 組織の従業員のメール アドレスを含むテーブル `Employees`。

* 項目 `Email_Original` の値に対して検索と置換の操作を実行するための新しい項目 `Email_Updated` を作成します。

会社名が変更された後、すべてのメール アドレスが新しい名前を反映するように更新されました。

要件:

* `test.com` のすべてのドメイン参照を `newcompanyname.com` に変換します。

* 大文字と小文字を区別しない正規表現操作を使用する必要があります。

ロード スクリプト

```
Employees:

Load 
ReplaceRegExI(Email_Original, '@[a-zA-Z0-9.-]*\.?test\.com', '@newcompanyname.com') as Email_Updated,
* Inline [
ID, Email_Original
1, john_doe@test.com
2, jane_doe@test.com
3, Michael_Andrews@test.com
4, charlie_kent@test.com
5, frances_johnson@test.com
6, rebecca_smith@test.com
];
```

結果

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

* `ID`

* `Email_Original`

* `Email_Updated`

結果テーブル

| ID | Email\_Original | Email\_Updated |
| --- | --- | --- |
| 1 | john\_doe@test.com | john\_doe@newcompanyname.com |
| 2 | jane\_doe@test.com | jane\_doe@newcompanyname.com |
| 3 | Michael\_Andrews@test.com | Michael\_Andrews@newcompanyname.com |
| 4 | charlie\_kent@support.test.com | charlie\_kent@newcompanyname.com |
| 5 | frances\_johnson@test.com | frances\_johnson@newcompanyname.com |
| 6 | rebecca\_smith@hr.test.com | rebecca\_smith@newcompanyname.com |

## 例 2 - ISBN コードをフォーマットするロード スクリプト

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

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

概要

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

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

* 変数 `ISBN_13` と `ISBN_10` には、それぞれ 13 桁と 10 桁の ISBN 文字列パターンに使用する正規表現が格納されます。

* ISBN 書籍コードの生の数値を含むテーブル `Employees`。テーブルには 13 桁と 10 桁の ISBN の両方が含まれています。

* ISBN の各部分を抽出するための複数の操作を実行し、標準の想定される形式でコード全体を示す文字列を返します。ReplaceRegEx()、MatchRegEx()、ExtractRegExGroup()、Pick() を組み合わせて使用します。

要件:

* 標準化された書式を使用して、数字を読みやすいテキストにフォーマットします。

  * ISBN ###-#-####-####-#

  * ISBN #-###-#####-#

ロード スクリプト

```
Set ISBN_13 = '^([0-9]{3})([0-9]{1})([0-9]{4})([0-9]{4})([0-9]{1})$';
Set ISBN_10 = '^([0-9]{1})([0-9]{3})([0-9]{5})([0-9]{1})$';

Formatted_Codes:

Load
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_13)', '$(ISBN_10)'), ReplaceRegEx(ISBN_Unformatted, '$(ISBN_13)', 'ISBN ' & ISBN_Component1 & '-' & ISBN_Component2 & '-' & ISBN_Component3 & '-' & ISBN_Component4 & '-' & ISBN_Component5), ReplaceRegEx(ISBN_Unformatted, '$(ISBN_10)', 'ISBN ' & ISBN_Component1 & '-' & ISBN_Component2 & '-' & ISBN_Component3 & '-' & ISBN_Component4)) as ISBN_Formatted;

Load *,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 1, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 1, 1)) as ISBN_Component1,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 2, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 2, 1)) as ISBN_Component2,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 3, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 3, 1)) as ISBN_Component3,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 4, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 4, 1)) as ISBN_Component4,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 5, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 5, 1)) as ISBN_Component5
inline `
ISBN_Unformatted
1233123412340
0122012301234
0001012301232
0111234567
5552555555553
2224222222222
1901234568
3333333333333
5551515151513
2321232323231
2444444444
8880999900000
`;
```

結果

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

* `ISBN_Formatted`

結果テーブル

| ISBN\_Formatted |
| --- |
| ISBN 000-1-0123-0123-2 |
| ISBN 0-111-23456-7 |
| ISBN 1-901-23456-8 |
| ISBN 2-444-44444-4 |
| ISBN 012-2-0123-0123-4 |
| ISBN 123-3-1234-1234-0 |
| ISBN 222-4-2222-2222-2 |
| ISBN 232-1-2323-2323-1 |
| ISBN 333-3-3333-3333-3 |
| ISBN 555-1-5151-5151-3 |
| ISBN 555-2-5555-5555-3 |
| ISBN 888-0-9999-0000-0 |

## 例 3 - セカンダリ メール アドレスを更新するチャートの数式

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

#### チャートの数式および結果

概要

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

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

* 組織の従業員のメール アドレスを含むテーブル `Employees`。これらは従業員ごとに 1 つの文字列に保存され、複数のメール アドレスが保存されます。

要件:

* ドメイン `newcompanyname.com` を使用するには、セカンダリ メール アドレスを更新する必要があります。プライマリ メールアドレスは更新しません。

* 大文字と小文字を区別しない正規表現操作を使用する必要があります。

ロード スクリプト

```
Employees:

Load * Inline [
ID, Emails
1, Primary: john_doe@test.com Secondary: john_michael_doe@example.com
2, Primary: jane_doe@test.com Secondary: jane_tabitha_doe_doe@example.com
3, Primary: Michael_Andrews@test.com Secondary: Michael_John_Andrews@example.com
4, Primary: charlie_kent@test.com Secondary: charlie_peter_kent@example.com
5, Primary: frances_johnson@test.com Secondary: frances_johnson@example.com
6, Primary: rebecca_smith@test.com Secondary: rebecca_danielle_smith@example.com
];
```

結果

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

* `ID`

* `Emails`

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

```
=ReplaceRegExI(Emails,'@[a-zA-Z0-9.-]*\.?[a-zA-Z0-9]*\.com','@newcompanyname.com',2)
```

結果テーブル

| ID | Emails | =ReplaceRegExI(Emails,'@[a-zA-Z0-9.-]\*\.?example\.com','@newcompanyname.com',2) |
| --- | --- | --- |
| 1 | Primary: john\_doe@test.com Secondary: john\_michael\_doe@example.com | Primary: john\_doe@test.com Secondary: john\_michael\_doe@newcompanyname.com |
| 2 | Primary: jane\_doe@test.com Secondary: jane\_tabitha\_doe\_doe@example.com | Primary: jane\_doe@test.com Secondary: jane\_tabitha\_doe\_doe@newcompanyname.com |
| 3 | Primary: Michael\_Andrews@test.com Secondary: Michael\_John\_Andrews@example.com | Primary: Michael\_Andrews@test.com Secondary: Michael\_John\_Andrews@newcompanyname.com |
| 4 | Primary: charlie\_kent@test.com Secondary: charlie\_peter\_kent@example.com | Primary: charlie\_kent@test.com Secondary: charlie\_peter\_kent@newcompanyname.com.com |
| 5 | Primary: frances\_johnson@test.com Secondary: frances\_johnson@example.com | Primary: frances\_johnson@test.com Secondary: frances\_johnson@newcompanyname.com |
| 6 | Primary: rebecca\_smith@test.com Secondary: rebecca\_danielle\_smith@example.com | Primary: rebecca\_smith@test.com Secondary: rebecca\_danielle\_smith@newcompanyname.com |

occurrence 引数に値 2 を指定すると、正規表現パターンに一致する 2 番目のインスタンスのみを更新できます。

## 詳細を見る

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