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)