複合高度なポリシー式
http.req.hostname.eq("mycompany.com") && http.req.method.eq(post)
http.req.url.length + http.req.cookie.length \<= 500
http.req.url.length + http.req.cookie.length \<= 500 && http.req.header.contains("some text")
複合式のブール値
-
&&.この演算子は論理 AND です。式を TRUE と評価するには、すべてのコンポーネントが TRUE と評価される必要があります。例:http.req.url.hostname.eq("myHost") && http.req.header("myHeader").exists
-
\|\|.この演算子は論理 OR です。式のいずれかのコンポーネントが TRUE と評価された場合、式全体が TRUE になります。
-
!.P 式に論理 NOT を指定します。
複合式の括弧
http.req.url.contains("myCompany.com") || (http.req.url.hostname.eq("myHost") && http.req.header("myHeader").exists)
(http.req.header("Content-Type").exists && http.req.header("Content-Type").eq("text/html")) || (http.req.header("Transfer-Encoding").exists || http.req.header("Content-Length").exists)
文字列の複合演算
| 文字列値を生成する操作 | 説明 |
|---|---|
| str + str | 演算子の左側の式の値と右側の値を連結します。例:http.req.hostname + http.req.url.protocol |
| str + num | 演算子の左側にある式の値と、右側の数値を連結します。例:http.req.hostname + http.req.url.content_length |
| num + str | 演算子の左側にある式の数値を、右側の文字列値と連結します。例:http.req.url.content_length + http.req.url.hostname |
| str + ip | 演算子の左側にある式の文字列値を、右側の IP アドレス値と連結します。例:http.req.hostname + 10.00.000.00 |
| IP + str | 演算子の左側にある式の IP アドレス値と右側の文字列値を連結します。例:client.ip.dst + http.req.url.hostname |
| str1 ALT str2 | string1 の評価によって undef 例外が発生するか、結果がヌル文字列である場合は string2 を使用します。それ以外の場合は string1 を使用し、string2 は決して評価しません。例:http.req.hostname alt client.ip.src |
| TRUE または FALSE の結果を生成する文字列に対する演算 | 説明 |
|---|---|
| str == str | 演算子の両側の文字列が同じかどうかを評価します。以下は例です:http.req.header (「myheader」) == http.res.header (「myheader」) |
| str <= str | 演算子の左側の文字列が右側の文字列と同じか、アルファベット順で先行するかを評価します。 |
| str >= str | 演算子の左側の文字列が右側の文字列と同じであるか、アルファベット順に続くかを評価します。 |
| str < str | 演算子の左側の文字列が、アルファベット順で右側の文字列より前にあるかどうかを評価します。 |
| str > str | 演算子の左側の文字列が、アルファベット順に右側の文字列の後に続くかどうかを評価します。 |
| str !!= str | 演算子の両側の文字列が異なるかどうかを評価します。 |
| 文字列に対する論理演算 | 説明 |
|---|---|
| bool && bool | この演算子は論理 AND です。複合式のコンポーネントを評価する場合、および、結合されたすべてのコンポーネントが TRUE と評価される必要があります。以下は例である。http.req.method.eq (GET) && http.req.url.query.contains (「viewReport && my_pagelabel」) |
| bool || bool | この演算子は論理 OR です。複合式のコンポーネントを評価するときに、OR に属する式のいずれかのコンポーネントが TRUE と評価されると、式全体が TRUE になります。以下は、例です。http.req.url.contains (「.js」) || http.res.header。(「コンテンツタイプ」)。(「javascript」) を含む |
| bool | 式に対して論理 NOT を実行します。 |
数値の複合演算
http.req.header.length + http.req.url.length
| 数値の算術演算 | 説明 |
|---|---|
| num + num | 演算子の左側の式の値を、右側の式の値に加算します。以下は例である。http.req.content_length + http.req.url.length |
| num – num | 演算子の右側の式の値を、左側の式の値から減算します。 |
| num*num | 演算子の左側の式の値と、右側の式の値を乗算します。次に例を示します。client.interface.rxthroughput* 9 |
| num / num | 演算子の左側の式の値を、右側の式の値で割ります。 |
| num % num | モジュロ、または演算子の左側の式の値を、右側の式の値で除算した剰余を計算します。たとえば、値「15 mod 4」は 3、「12 mod 4」の値は 0 です。 |
| ~number | 数値のビット単位の論理否定を適用した後の数値を返します。次の例では、数値.expression が 12 (バイナリ 1100) を返すと仮定しています:~numeric.expression。〜演算子を適用した結果は、-11(バイナリ1110011、合計32ビット、すべてが左側)です。演算子を暗黙的に適用する前の32ビット未満のすべての戻り値は、32ビット幅になるように左にゼロがあることに注意してください。 |
| number \^ number | 等しい長さの 2 つのビットパターンを比較し、各 number 引数の対応するビットの各ペアに対して XOR 演算を実行します。ビットが異なる場合は 1 を返し、同じ場合は 0 を返します。整数引数と現在の数値にビット単位の排他的論理和を適用した後の数値を返します。ビット単位の比較の値が同じ場合、戻り値は 0 です。次の例では、数値.式 1 は 12 (バイナリ 1100) を返し、数値.式 2 は 10 (バイナリ 1010) を返します。数値.式1 \^ 数値.式2 \^ 演算子を式全体に適用した結果は 6 (バイナリ 0110) です。演算子を暗黙的に適用する前の32ビット未満のすべての戻り値は、32ビット幅になるように左にゼロがあることに注意してください。 |
| 数値| 数値 | 数値にビット単位の OR を適用した後の数値を返します。ビット単位の比較のいずれかの値が 1 の場合、戻り値は 1 です。次の例では、数値.式 1 が 12 (バイナリ 1100) を返し、数値.式 2 が 10 (バイナリ 1010) を返すと仮定しています。数値.式1 | 数値.式2 | 演算子を式全体に適用した結果は 14 (バイナリ 1110) です。演算子を暗黙的に適用する前の32ビット未満のすべての戻り値は、32ビット幅になるように左にゼロがあることに注意してください。 |
| number & number | 等しい長さの 2 つのビットパターンを比較し、対応するビットの各ペアに対してビット単位の AND 演算を実行します。両方のビットに 1 の値が含まれている場合は 1 を返し、いずれかのビットが 0 の場合は 0 を返します。次の例では、数値.式1 が 12 (バイナリ 1100) を返し、数値.式2 は 10 (バイナリ 1010) を返すと仮定しています。数値.式1 と数値.式2 式全体が 8 (バイナリ 1000) と評価されます。演算子を暗黙的に適用する前の32ビット未満のすべての戻り値は、32ビット幅になるように左にゼロがあることに注意してください。 |
| num << num | 右側の number 引数のビット数によって、数値値のビット単位の左シフトの後に数値を返します。シフトされるビット数は 32 を法とする整数であることに注意してください。次の例では、numeric.expression1 が 12 (バイナリ 1100) を返し、numeric.expression2 が 3 を返すと仮定しています。numeric.expression1 << numeric.expression2 LSHIFT 演算子を適用した結果は 96 (バイナリ 1100000) になります。演算子を適用する前に、32 ビット未満のすべての値が返されることに注意してください。暗黙的に左にゼロを持たせて、32 ビット幅にします。 |
| num >> num | 整数引数のビット数による数値値のビット単位の右シフト後の数値を返します。シフトされるビット数は 32 を法とする整数であることに注意してください。次の例では、数値.式1 が 12 (バイナリ 1100) を返し、数値.式2 が 3 を返すと仮定しています。数値.式1 >> 数値.式2 RSHIFT 演算子を適用した結果は 1 (バイナリ 0001) です。演算子を暗黙的に適用する前の32ビット未満のすべての戻り値は、32ビット幅になるように左にゼロがあることに注意してください。 |
| TRUE または FALSE の結果を生成する数値演算子 | 説明 |
|---|---|
| num == num | 演算子の左側の式の値が、右側の式の値と等しいかどうかを判断します。 |
ポリシーインフラストラクチャのデータ型の関数
-
整数 (32 ビット)
-
符号なしロング (64 ビット)
-
ダブル (64 ビット)
算術演算子、論理演算子、および型推進
-
+、-、*、/
-
%, ~, \^, &, |、<><, and > (ダブルには適用されません)
-
==、!=、>、<、>=、<=
-
Double
-
符号なしロング
-
整数