PCRE_TABLE(5) PCRE_TABLE(5) 名前 pcre_table - Postfix PCRE テーブルの書式 書式 pcre:/etc/postfix/filename postmap -q "string" pcre:/etc/postfix/filename postmap -q - pcre:/etc/postfix/filename <inputfile 解説 Postfix メールシステムはアドレスの書き換えやメールのルー ティングをするためのテーブルをオプションで使います。これら の テーブルは通常は dbm または db 形式です。代わりに検索テ ーブルに Perl 互換正規表現形式で指定することができます。 Postfix がサポートしているマップ形式を見る に は、postconf -m コマンドを使います。 検 索 テ ー ブルをテストするには、上の書式に記述したように postmap コマンドを使います。 PCRE テーブルの一般的な形式は: /pattern/flags result pattern が検索文字列にマッチすると、対応する result の値を使います。 空行とコメント 空 行 や 空白だけの行は無視され、行頭の非空白文字が `#' で始まる行も同様です。 複数行テキスト 論理行は非空白字文字で始まります。空白で始まる行 は 前の論理行を継続します。 if /pattern/flags endif 検 索文字列が pattern にマッチしたときのみ、 if と endif の間のパターンに対して検索文字列がマッチし ま す。if..endif はネストできます。 注 意: if..endif の内部のパターンの前に空白をつけな いでください。 それぞれのパターンは perl ライクな正規表現です。表現のデリ ミタは空白や特別な意味を持つ文字を除いてどの文字も使えます (伝統的にスラッシュが使われます)。正規表現は空白を含むこと ができます。 デフォルトではマッチは大文字・小文字の区別をせず、改行は特 別な文字として扱われません。この振る舞いはフラグによって制 御され、次の一つまたはそれ以上をつけることでトグルスイッチ が切り替わります: i (デフォルト: on) 大文字・小文字の区別のフラグを切り替えます。デ フォ ルトではマッチングは大文字・小文字を区別しません。 m (デフォルト: off) PCRE_MULTILINE フラグを切り替えます。このフラグが on の場合、 ^ および $ メタキャラクタは目的の文字列 の 最初と最後に加えて、それぞれ直後および直前の改行 文字にマッチします。 s (デフォルト: on) PCRE_DOTALL フラグを切り替えます。このフラグ が on の 場 合、. メタキャラクタは改行文字にマッチしま す。Postfix バージョン 20020528 以前では、デフォ ル ト で はこのフラグは off であり、複数行のメッセージ ヘッダに対しては不便でした。 x (default: off) pcre 拡張フラグを切り替えます。このフラグが on の場 合、 パターン中の (文字クラス以外の) 空白、および文 字クラスの外の # と改行文字の間の文字は無視さ れ ま す。パターンの一部として空白や # 文字を含むために、 バックスラッシュでエスケープすることができます。 A (デフォルト: off) PCRE_ANCHORED フラグを切り替えます。このフラグが on の 場合、パターンの "anchored" が強制されます。つま り、検索される文字列 ("目的の文字列") の最初だけ が マッ チするように制限されます。この効果はパターン自 身の適切な構成によっても得ることができます。 E (default: off) PCRE_DOLLER_ENDONLY フラグを切り替えます。このフ ラ グが on の場合、パターンの $ メタキャラクタは目的の 文字列の最後だけにマッチします。このフラグがなけ れ ば、 最後の文字が改行文字の場合、 (他の改行文字の前 ではなく) 最後の改行文字の直前にもマッチします。 こ の フラグは PCRE_MULTILINE フラグがセットされている と無視されます。 U (default: off) 非貪欲 (ungreedy) マッチングフラグを切り替えま す。 こ のフラグが on の場合、パターンマッチングエンジン は定量化の貪欲さを反転し、その結果デフォルトでは 貪 欲 でないが、"?" が続くと貪欲になります。このフラグ はパターン内で (?U) 修飾子をセットすることもでき ま す。 X (default: off) PCRE_EXTRA フラグを切り替えます。このフラグが on の 場合、特別な意味のない文字が後に続く、パターン内 の バッ クスラッシュは全てエラーにして、将来の拡張のた めにこれらの組み合わせを予約します。 それぞれのパターンは検索キーの文字列全体に適用される正規表 現です。場合によって、文字列はクライアントのホスト名全体で あったり、クライアントの IP アドレス全体、もしくはメールア ドレス全体になったりします。従って、親ドメインや親ネットワ ーク検索は行なわれませんし、 user@domain メールアドレス は user と domain という構成要素に分割されたり、user+foo が user と foo に分割されることはありません。 パターンは検索文字列にマッチするまで、テーブルに指定された 順で適用されます。 慣例的な perl 文法 ($1, $2, etc.) を使って、マッチした表現 を result の文字列で置き換えることも可能です。 result の文 字列中のマクロは、後に空白が続かない場合に ${n} や $(n) を 必要とするかも知れません。 SMTPD ACCESS マップの例 # 外行きの majordomo 爆発の防止 /^(?!owner-)(.*)-outgoing@(.*)/ 550 Use ${1}@${2} instead # whatever が自ドメインである時以外(全ての friend@ メールをバウンス # する方がよいのですが - これは単なる例です)、friend@whatever を # バウンスする。 /^friend@(?!my\.domain)/ 550 Stick this in your pipe $0 # 複数行のエントリ。テキストは1行で送られます。 # /^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. ヘッダフィルタマップの例 /^Subject: make money fast/ REJECT /^To: friend@public\.com/ REJECT BODY FILTER MAP の例 # CPU サイクル節約のために、最初に base 64 エンコードされたテキストを # スキップします。 PCRE version 3 が必要です。 ~^[[:alnum:]+/]{60,}$~ OK # ここにあなた自身の body パターンを置いてください。 関連項目 regexp_table(5) POSIX 正規表現テーブルの書式 作者 PCRE テーブル検索コードは元々次の人によって書かれました: 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)