# 正規表現の一致に基づいて値を返す

IfThenElseファンクションをMatchesファンクションと共に使えば、入力値のパターンに応じた出力値を定義できます。

## 始める前に

入力ストラクチャーと出力ストラクチャーを持つマップを作成済みであること。次のサンプルを使用できます。

## このタスクについて

この例では、連絡先情報が含まれているXMLファイルを使います。属性を使い、stateエレメントとphoneエレメントが特定のパターンにマッチしていることをチェックし、連絡先が有効か無効かを示したいとします。入力には次のXMLサンプルを使います:

```
<contacts>
	<contact>
		<lastName>Harrison</lastName>
		<firstName>Jane</firstName>
		<street>French Camp Turnpike Road</street>
		<zipCode>30316</zipCode>
		<city>Atlanta</city>
		<state>Georgia</state>
		<phone>(678)123-4567</phone>
	</contact>
	<contact>
		<lastName>Johnson</lastName>
		<firstName>Katherine</firstName>
		<street>Santa Rosa South</street>
		<zipCode>85162</zipCode>
		<city>Phoenix</city>
		<state>AZ</state>
		<phone>(602)789-0123</phone>
	</contact>
	<contact>
		<lastName>Monroe</lastName>
		<firstName>Martin</firstName>
		<street>N Kentwood</street>
		<zipCode>32315</zipCode>
		<city>Tallahassee</city>
		<state>FL</state>
		<phone>(805) 456-7890</phone>
	</contact>
</contacts>
```

次のXMLサンプルを使えば、出力ストラクチャーを作成できます:

```
<contacts>
	<contact status="">
		<lastName/>
		<firstName/>
		<street/>
		<zipCode/>
		<city/>
		<state/>
		<phone/>
	</contact>
	<contact status="">
		<lastName/>
		<firstName/>
		<street/>
		<zipCode/>
		<city/>
		<state/>
		<phone/>
	</contact>
</contacts>
```

## 手順

1. 入力contactエレメントを対応する出力にドラッグ＆ドロップし、子エレメントをマッピングさせます。

   ![](https://help.qlik.com/talend/ja-JP/data-mapper-functions-reference-guide/Resources/images/match_values_with_regex_01_map.png)
2. IfThenElseファンクションをstatus属性にドラッグ＆ドロップします。
3. AndファンクションをCondition属性にドラッグ＆ドロップした後、2つのMatchesファンクションをAndファンクションにドラッグ＆ドロップします。

   ![](https://help.qlik.com/talend/ja-JP/data-mapper-functions-reference-guide/Resources/images/match_values_with_regex_02_ifthenelse.png)
4. 入力stateエレメントを最初のMatchesファンクションのInput Value引数にドラッグ＆ドロップし、入力phoneエレメントを2番目のファンクションにドラッグ＆ドロップします。
5. stateエレメントに関連付けられているMatchesファンクションをダブルクリックし、[Regex Value] (正規表現の値)フィールドに^[A-Z]{2}$と入力して[Case sensitive] (大文字と小文字を区別)チェックボックスをオンにし、[OK]をクリックします。

   これは、stateエレメントの値が2つの大文字でなければならないことを示しています。
6. phoneエレメントに関連付けられているMatchesファンクションをダブルクリックし、[Regex Value] (正規表現の値)フィールドに^\(\d{3}\)\d{3}-\d{4}$と入力してOKをクリックします。

   これは、phoneエレメントの値が、括弧に入った3桁の数字、3桁、ハイフン、4桁の数字という形式でなけれなばならいことを示しています。
7. ConstantファンクションをThen引数にドラッグ＆ドロップし、[Value] (値)フィールドにvalidと入力して[OK]をクリックします。
8. ConstantファンクションをElse引数にドラッグ＆ドロップし、その値をinvalidに設定して[OK]をクリックします。

## タスクの結果

マップが設定されます。contactエレメントのstatus属性は、状態と電話番号の両方が定義済みのパターンにマッチする場合はvalidとなります。一致しない場合、値はinvalidとなります。 ![](https://help.qlik.com/talend/ja-JP/data-mapper-functions-reference-guide/Resources/images/match_values_with_regex_03_result.png)

[Test Run] (テスト実行)機能を使えば結果を表示できます。この例では次のような出力が返されます。

```
<contacts>
  <contact status="invalid">
    <lastName>Harrison</lastName>
    <firstName>Jane</firstName>
    <street>French Camp Turnpike Road</street>
    <zipCode>30316</zipCode>
    <city>Atlanta</city>
    <state>Georgia</state>
    <phone>(678)123-4567</phone>
  </contact>
  <contact status="valid">
    <lastName>Johnson</lastName>
    <firstName>Katherine</firstName>
    <street>Santa Rosa South</street>
    <zipCode>85162</zipCode>
    <city>Phoenix</city>
    <state>AZ</state>
    <phone>(602)789-0123</phone>
  </contact>
  <contact status="invalid">
    <lastName>Monroe</lastName>
    <firstName>Martin</firstName>
    <street>N Kentwood</street>
    <zipCode>32315</zipCode>
    <city>Tallahassee</city>
    <state>FL</state>
    <phone>(805) 456-7890</phone>
  </contact>
</contacts>
```