The expression must match the following syntax (given as a BNF grammar notation):
comp ::= word "==" word | word "eq" word
                | word "!=" word | word "ne" word
                | word "<" word | word "lt" word
                | word "<=" word | word "le" word
                | word ">" word | word "gt" word
                | word ">=" word | word "ge" word
                | word "in" "{" wordlist "}"
                | word "=~" regex
                | word "!~" regex
wordlist ::= word
                | wordlist "," word
word ::= digit
                | cstring
                | variable
                | function
digit ::= [0-9]+
cstring ::= "..."
variable ::= "%{" varname "}"
function ::= funcname "(" funcargs ")"
while for varname any variable from Table 1 can be used. Finally for funcname the following functions are available: file(filename)
This function takes one string argument and expands to the contents of the file. This is especially useful for matching these contents against a regular expression, etc.
Notice that expression is first parsed into an internal machine representation and then evaluated in a second step. Actually, in Global and Per-Server Class context expression is parsed at start-up time and at runtime only the machine representation is executed. For Per-Directory context this is different: here expression has to be parsed and immediately executed for every request.