# PCRE_TABLE(5)                                       PCRE_TABLE(5)
# 
# NAME
#        pcre_table - format of Postfix PCRE tables
# 
# SYNOPSIS
#        pcre:/etc/postfix/filename
# 
#        postmap -q "string" pcre:/etc/postfix/filename
# 
#        postmap -q - pcre:/etc/postfix/filename <inputfile
# 
# DESCRIPTION
#        The  Postfix  mail system uses optional tables for address
#        rewriting or mail routing. These tables are usually in dbm
#        or  db  format. Alternatively, lookup tables can be speci-
#        fied in Perl Compatible Regular Expression form.
# 
#        To find out what types of lookup tables your Postfix  sys-
#        tem supports use the postconf -m command.
# 
#        To   test  lookup  tables,  use  the  postmap  command  as
#        described in the SYNOPSIS above.
# 
#        The general form of a PCRE table is:
# 
#        /pattern/flags result
#               When pattern matches a search string, use the  cor-
#               responding result value.
# 
#        blank lines and comments
#               Empty  lines and whitespace-only lines are ignored,
#               as are lines whose first  non-whitespace  character
#               is a `#'.
# 
#        multi-line text
#               A  logical  line starts with non-whitespace text. A
#               line that starts with whitespace continues a  logi-
#               cal line.
# 
#        if /pattern/flags
# 
#        endif  Examine the lines between if..endif only if pattern
#               matches. The if..endif can nest.   Do  not  prepend
#               whitespace to patterns inside if..endif.
# 
#        Each  pattern  is  a  perl-like  regular  expression.  The
#        expression delimiter can be any character, except  whites-
#        pace  or  characters that have special meaning (tradition-
#        ally the forward slash is used).  The  regular  expression
#        can contain whitespace.
# 
#        By default, matching is case-insensitive, and newlines are
#        not treated as special characters. The  behavior  is  con-
#        trolled  by  flags,  which are toggled by appending one or
#        more of the following characters after the pattern:
# 
#        i (default: on)
#               Toggles the  case  sensitivity  flag.  By  default,
#               matching is case insensitive.
# 
#        m (default: off)
#               Toggles  the PCRE_MULTILINE flag. When this flag is
#               on, the ^ and $  metacharacters  match  immediately
#               after  and  immediately before a newline character,
#               respectively, in addition to matching at the  start
#               and end of the subject string.
# 
#        s (default: on)
#               Toggles the PCRE_DOTALL flag. When this flag is on,
#               the .  metacharacter matches the newline character.
#               With  Postfix  versions prior to 20020528, The flag
#               is off by default, which is inconvenient for multi-
#               line message header matching.
# 
#        x (default: off)
#               Toggles  the  pcre extended flag. When this flag is
#               on, whitespace in the  pattern  (other  than  in  a
#               character class) and characters between a # outside
#               a character class and the  next  newline  character
#               are  ignored.  An escaping backslash can be used to
#               include a whitespace or # character as part of  the
#               pattern.
# 
#        A (default: off)
#               Toggles  the PCRE_ANCHORED flag.  When this flag is
#               on, the pattern is forced to  be  "anchored",  that
#               is, it is constrained to match only at the start of
#               the string which is being  searched  (the  "subject
#               string").  This  effect  can  also  be  achieved by
#               appropriate constructs in the pattern itself.
# 
#        E (default: off)
#               Toggles the  PCRE_DOLLAR_ENDONLY  flag.  When  this
#               flag  is  on,  a  $  metacharacter  in  the pattern
#               matches only at the  end  of  the  subject  string.
#               Without  this  flag,  a dollar also matches immedi-
#               ately before the final character if it is a newline
#               character (but not before any other newline charac-
#               ters). This flag is ignored if PCRE_MULTILINE  flag
#               is set.
# 
#        U (default: off)
#               Toggles the ungreedy matching flag.  When this flag
#               is on, the  pattern  matching  engine  inverts  the
#               "greediness"  of  the  quantifiers so that they are
#               not greedy by default, but become  greedy  if  fol-
#               lowed  by  "?".   This  flag can also set by a (?U)
#               modifier within the pattern.
# 
#        X (default: off)
#               Toggles the PCRE_EXTRA flag.  When this flag is on,
#               any  backslash  in  a pattern that is followed by a
#               letter that has no special meaning causes an error,
#               thus reserving these combinations for future expan-
#               sion.
# 
#        Each pattern is applied to the entire lookup  key  string.
#        Depending  on  the  application,  that string is an entire
#        client hostname, an entire client IP address, or an entire
#        mail  address.   Thus,  no parent domain or parent network
#        search is done, and user@domain  mail  addresses  are  not
#        broken  up  into  their user and domain constituent parts,
#        nor is user+foo broken up into user and foo.
# 
#        Patterns are applied in the  order  as  specified  in  the
#        table,  until  a  pattern is found that matches the search
#        string.
# 
#        Substitution of substrings  from  the  matched  expression
#        into  the result string is possible using the conventional
#        perl syntax ($1, $2, etc.).   The  macros  in  the  result
#        string  may  need  to  be  written as ${n} or $(n) if they
#        aren't followed by whitespace.
# 
# EXAMPLE SMTPD ACCESS MAP
#        # Protect your outgoing majordomo exploders
#        /^(?!owner-)(.*)-outgoing@/     550 Use ${1}@${2} instead
# 
#        # Bounce friend@whatever, except when whatever is our domain (you would
#        # be better just bouncing all friend@ mail - this is just an example).
#        /^friend@(?!my\.domain)/        550 Stick this in your pipe $0
# 
#        # A multi-line entry. The text is sent as one line.
#        #
#        /^noddy@my\.domain$/
#         550 This user is a funny one. You really don't want to send mail to
#         them as it only makes their head spin.
# 
# EXAMPLE HEADER FILTER MAP
#        /^Subject: make money fast/     REJECT
#        /^To: friend@public\.com/       REJECT
# 
# EXAMPLE BODY FILTER MAP
#        # First skip over base 64 encoded text to save CPU cycles.
#        # Requires PCRE version 3.
#        ~^[[:alnum:]+/]{60,}$~          OK
# 
#        # Put your own body patterns here.
# 
# SEE ALSO
#        regexp_table(5) format of POSIX regular expression tables
# 
# AUTHOR(S)
#        The PCRE table lookup code was originally written by:
#        Andrew McNamara
#        andrewm@connect.com.au
#        connect.com.au Pty. Ltd.
#        Level 3, 213 Miller St
#        North Sydney, NSW, Australia
# 
#        Adopted and adapted by:
#        Wietse Venema
#        IBM T.J. Watson Research
#        P.O. Box 704
#        Yorktown Heights, NY 10598, USA
# 
#                                                     PCRE_TABLE(5)
