正規表現の使用 (Using regular expressions)
正規表現フォーマット
Orion でサポートされている正規表現のセットは POSIX Extended です (詳細はこちらをご覧ください)
POSIX はルック・アラウンド (lookarounds) をサポートしていないため、このような式は使用できないことに注意してください:
^(?!WeatherObserved).*
ただし、POSIX と同等のものを見つけることができます。たとえば、上記の式はこれと同等です (詳細はこの投稿を参照):
^(([^\nW].{14}|.[^\ne].{13}|.{2}[^\na].{12}|.{3}[^\nt].{11}|.{4}[^\nh].{10}|.{5}[^\ne].{9}|.{6}[^\nr].{8}|.{7}[^\nO].{7}|.{8}[^\nb].{6}|.{9}[^\ns].{5}|.{10}[^\ne].{4}|.{11}[^\nr].{3}|.{12}[^\ntv].{2}|.{13}[^\ne].|.{14}[^\nd]).*|.{0,14})$
それらは長くて醜いかもしれませんが、機能的には同等です。
ペイロードの正規表現
一部の操作では、以下に示すように、ペイロードで正規表現を使用できます。
例 :
POST /v2/op/query
{
"entities": [
{
"idPattern": ".*",
"type": "Sensor"
}
]
}
正規表現言語では、バックスラッシュ (\
) を使用できます。たとえば、SENSOR\d{2}
は、SENSOR と2桁の数字が続く文字列と一致します。ただし、\
は JSON の特殊文字です。JSON 仕様によれば、それは \\
でエンコードする必要があります。
例 :
POST /v2/op/query
{
"entities": [
{
"idPattern": "SENSOR\\d{2}",
"type": "Sensor"
}
]
}
シェルを使用してリクエストを送信すると、問題がさらに楽になる可能性があります。たとえば、複数行の curl を使用する場合、シェルレベルで \
をエスケープする必要があります。例えば :
curl localhost:1026/v2/op/query -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
"entities": [
{
"idPattern": "SENSOR\\\\d{2}",
"type": "Sensor"
}
]
}
EOF
つまり、シェルレベルの SENSOR\\\\d{2}
文字列は、Orion の JSON 解析段階の後の正規表現 SENSOR\d{2}
に順番に対応するペイロードレベル (つまり、ワイヤを介して送信される実際の HTTP リクエスト) で SENSOR\\d{2}
に変換されます。ただし、ペイロードにファイルを使用する場合、シェルのエスケープは不要です。つまり、次のようになります :
curl localhost:1026/v2/op/query -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @payload.json
次の payload.json ファイルを使用します :
{
"entities": [
{
"idPattern": "SENSOR\\d{2}",
"type": "Sensor"
}
]
}
これに関する詳細は github の次の issue コメントに記載されています。