DataWeave での正規表現の使用

いくつかの DataWeave 関数は、引数として正規表現を受け入れます。これを使用して、一致を返したりチェックしたりできます。関数と変数を含む DataWeave 式を組み込んだ正規表現を作成することもできます。

開始する前に、DataWeave 2.0 (%dw 2.0​) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave 1.0 (%dw 1.0​) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクタを使用できます。

文字列から一致を返す

この例では、いくつかの DataWeave 関数で正規表現を使用して、入力変数「mycompany.com」との一致を返します。

  • contains​ は、入力文字列の一部に一致する正規表現に基づいて ​true​ を返します。

  • find​ は、入力文字列内の一致する場所を指定するインデックスの配列を返します。この関数は、入力文字列を文字列配列として扱います。

  • match​ は、正規表現に一致するサブ文字列の配列を返します。

  • matches​ は、正規表現が入力文字列と完全に一致するため ​true​ を返します。

  • replace​ は、正規表現 ​\..*m​ に基づいて、入力文字列の ​.com​ を ​.net​ に変更する URL を返します。

  • scan​ は、正規表現が一致するカンマ区切りのサブ文字列のサブ配列を返します。

  • splitBy​ は、入力の ​.​ に基づいて入力文字列をサブ文字列の配列に分割します。

DataWeave スクリプト:
%dw 2.0
var myString = "mycompany.com"
output application/json
---
{
	"contains" : myString contains(/c.m/),
	"find" : myString find(/[m|n].|m$/),
	"match" : myString match(/([a-z]*).[a-z]*/),
	"matches" : myString matches(/([a-z]*).[a-z]*/),
	"replaceWith" : myString replace /\..*m/ with ".net",
	"scan" : myString scan(/([a-z]*).(com)/),
	"splitBy" : myString splitBy(/[.\/]/)
}
出力 JSON:
{
  "contains": true,
  "find": [
    [
      0
    ],
    [
      4
    ],
    [
      7
    ],
    [
      12
    ]
  ],
  "match": [
    "mycompany.com",
    "mycompany"
  ],
  "matches": true,
  "replaceWith": "mycompany.net",
  "scan": [
    [
      "mycompany.com",
      "mycompany",
      "com"
    ]
  ],
  "splitBy": [
    "mycompany",
    "com"
  ]
}

関数のドキュメントについては、以下を参照してください。

正規表現での DataWeave 変数と関数の使用

この例は、DataWeave の連結関数 (​++​) を使用して正規表現を作成し、DataWeave 変数を正規表現に組み込みます。 この正規表現は「somebiz」を照合します。この例では、​replace​ と ​with​ を使用して「somebiz」を「abcd」に置き換えます。

DataWeave スクリプト:
%dw 2.0
var myCompany = { "name" : "biz" }
var myInputA = "somebiz-98765"
output application/json
---
{
  example: myInputA replace (("(^s.*e)" ++ myCompany.name) as Regex) with ("abcd")
}
出力 JSON:
{
  "example": "abcd-98765"
}

Was this article helpful?

💙 Thanks for your feedback!