Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Regular Expression?

16 views
Skip to first unread message

NIDE Naoyuki

unread,
Mar 18, 2006, 4:51:38 AM3/18/06
to
SpamAssassin 3.1.1の設定ファイルを見ていると、次のようなものがしばしば
現れています。

header __SUBJECT_FUZZY_VPILL Subject =~ /<inter W2><post P3>(?!viagra)<V><I><A><G><R><A>/i

(ファイル25_replace.cf中)

=~の右辺はPerlの正規表現だと思うのですが、「<inter W2>」とか「<V>」と
かはどう読めばよいのでしょうか。Perlの正規表現では、単独の「<」や「>」は
特別な意味を持っていなかったと思うのですが。perlreあたりを見ても特に記載
はありませんし、SpamAssassinがこの記法に対して何らかの前処理を行ってから
Perlに食わせているのかと思ってSpamAssassinのドキュメントに当たっても、
「<inter…」のようなものに関する言及は特に見当たりません。googleは
「<inter」のような文字列を探せないので全く役に立ちませんし。

ni...@ics.nara-wu.ac.jp

Shinji KONO

unread,
Mar 18, 2006, 6:21:12 AM3/18/06
to
河野真治 @ 琉球大学情報工学です。

In article <0603181851...@hayabusa.ics.nara-wu.ac.jp>, ni...@ics.nara-wu.ac.jp (NIDE Naoyuki) writes
> 「<inter」のような文字列を探せないので全く役に立ちませんし。

ここには特別な意味はありません。< は、\< で escape すべきだとは
思うけど。

main::(-e:1): 0
DB<1> $a = "<ahoge>"

DB<2> p $a=~/</
1

ってな感じ。(まぁ、man perlre しろって言いたいところもあるけどさ)

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科

NIDE Naoyuki

unread,
Mar 18, 2006, 7:29:40 AM3/18/06
to
In article <0603181851...@hayabusa.ics.nara-wu.ac.jp>, I write:
> header __SUBJECT_FUZZY_VPILL Subject =~ /<inter W2><post P3>(?!viagra)<V><I><A><G><R><A>/i
>
> =~の右辺はPerlの正規表現だと思うのですが、「<inter W2>」とか「<V>」と
> かはどう読めばよいのでしょうか。

解決しました。
これについては、perldoc Mail::SpamAssassin::Plugin::ReplaceTags に記載
がありました。SpamAssassinが前処理を行ってから、Perlの正規表現として処理
しているようです。前処理のルールは、SpamAssassinのルールファイル
25_replace.cfの中に

replace_tag V (?:[vu]|\\\/)
replace_inter W2 \W{0,2}
replace_post P3 {1,3}

のように書かれています。これにより、正規表現中の「<V>」を「(?:[vu]|\\\/)」
に置き換え(vに似た文字の一覧ですね)、各タグ(「<」「>」で囲まれた部分)の
間に「\W{0,2}」を、各タグの後に「{1,3}」を挿入するようです。結局、
「viagraを曖昧に書いてフィルタを逃れようとしている文字列」を捕捉しようと
していることになります。これは便利そう。

…ただ問題は、Mail::SpamAssassin::Plugin::ReplaceTagsを見ればよいとい
うことを、どうやって知ればよかったのかということにあります(全く分かりま
せんでした)。「<inter」を探したのも敗因の1つだったようですが。(「inter」
を探してみてやっと見つけた)
ni...@ics.nara-wu.ac.jp

Shinji KONO

unread,
Mar 19, 2006, 7:54:29 AM3/19/06
to
河野真治 @ 琉球大学情報工学です。

In article <0603182129...@hayabusa.ics.nara-wu.ac.jp>, ni...@ics.nara-wu.ac.jp (NIDE Naoyuki) writes


> …ただ問題は、Mail::SpamAssassin::Plugin::ReplaceTagsを見ればよいとい
> うことを、どうやって知ればよかったのかということにあります(全く分かりま
> せんでした)。「<inter」を探したのも敗因の1つだったようですが。(「inter」
> を探してみてやっと見つけた)

それはドキュメントの問題だな。この当たりの実装技術はいくつか
ありますが、全部をドキュメント化するのはむずかしい。

Shinji KONO

unread,
Jun 9, 2006, 1:33:06 AM6/9/06
to
河野真治 @ 琉球大学情報工学です。

自分の~/bin にあるPerl Scritptを拾ってみました。使ってないも
のには*。名前を思い出せなくて、もう一度作ってしまうこともあ
る...

a2ps*
 Utashiro version だ。古い。もはや使わない。そもそもプリントしないし。

add
 メールをwhite listに付け加える。MHユーザなのでコマンドラインからやります。

admin-count.pl*
 サーバ班の採点はメールの応答の回数でやってた。

ae
aeview.pl
 Grolier Multimedia Encycopedia ってCDROMを91年ぐらいに買ったので、そのViewer
aeview.pl の方は解析ツールらしい。text だけ抜き出して、sort している。英語だ
から、あんまり使わない。ちなみに、Portable CDROM drive もその時に一緒に買った。
死ぬほど多かったです。今は、画像も取り出せるのだが、それはサポートしてません。

c2html.pl
 CのソースをHTMLに変換。講義のページを作る時。

check_dup.pl*
 同じファイルを列挙する。size でindex作って、同じものだけcmpとかいうアルゴリズ
ム。今だったらCRC使うだろうが。

concordance.pl*
 文書中のwordの頻度を表示。使ってません。

data2xcal.pl
 フラットテキストで書いた予定をXcalendarに入れる。backup scriptに仕込んであり
ます。カレンダーツールに入れるのかったるくて、date: 2006/7/22 オープンキャンパ
ス とか、どんどんファイルに書いていく方式を使ってます。


fjpost*
 昔書いた、投稿用スクリプトらしい。

fuma
 MHで、複数のメールを参照する時のスクリプト。市川さん作らしい。

giflist2html.pl*
jpglist2html.pl*
 画像のサムネイルを作る。今は、iPhoto使うことが多い。

grep_fj.pl*
 .newsrc から、fj を抜き出すらしい。手で打った方が早い。

i
ir
 メールを読むscript。server/clientに分かれていて、結構、複雑。SAPM filterは、s
erver で処理されます。logには、どのルールでメールが分類されたか残るらしい。ir
はclient 側だが、今では一つのscriptになっている。

to_i*
 i に、bad domainを付け加えるスクリプトだったらしい

idraw2graffle.pl*
tgif5idraw.pl*
xfig2idraw.pl*
 昔のX Window のdrawing tool からOmniGraffleのフォーマットに変換するツール。tg
ifやxfigもidraw経由で変換できる。もう使わない。

junk
 Mailのjunkのメンテナンスツール。msh のfront end。junk ls とかすると、177M溜っ
ているようです。

lessthan.pl*
 10kb 以下のファイルを列挙するscript。何に使ったんだろう? iPhoto用らしい。

lnpict.pl*
mvpict.pl*
renum*
 画像ファイル処理用 mv とか link するみたいね。

ls2html.pl
 そこのディレクトリにあるファイルをhrefに変換する。

mcount.pl*
 fj の投票管理script。昔は良く使っていた。

mhlnkf*
 nkfを噛ませたmhl (MH用のテキスト整形) 。MH自体をUTF8対応にしたので、もう使わ
ない。

mhmime
 MHで、MIMEの添付ファイルを作るための補助スクリプト。vi で、mh *.jpgとかするら
しい。

mhncnv*
 mhn をデバッグした時の残骸らしい

mm2text.pl
 FreeMind をフラットテキストに直す

msh2html.pl
 msh (メールアーカイブ)をHTMLに変換。MHonArc を使えば良い。でも、めんどうなの
で、まだ、使ってます。

news.pl
 MHから news 投稿用のscript。remote から投稿出来るようにしたいんだけど、やって
ない。

o2html
o2mgp
o2mm
o2s5
o2tex
 自分用のoutline format から各種フォーマットへの変換

packf.pl
 MHのpackfには999までしかファイルを扱えないバグがあったので自分で書いた。

postcnv
 MH用の投稿script。一旦、サーバに入って投稿する仕組みになっている。

ptrn*
 最初にspam を振り分けて読むためのtrn front endだったらしい。ニュースリーダ。

pxcal.pl
 Xcalendar format の今後一週間の予定を表示。あるいは三日分をメール。

rcs_view.pl*
 cvs annotate ってのがあるのを知らずに自分で作った...

re-date.pl*
 昔の間違った日付がついたMH archiveを修正するものらしい...

rev.pl
 tac とか、cat -r とかに相当するファイルの行を逆順に表示する

rmmdup*
 メールの重複を調べる

tab2html.pl
 TSV(Tabで区切られたデータ)をHTMLのtableに変換。o2htmlに内蔵されてる。

text2html.pl
 フラットテキストをHTMLに変換

text2numchar
 HTMLのunicode表現に変換する

tsv2dat.pl*
 どうも、EntourageのアドレスをTSVに吐いたものを自分用のフォーマットに変換する
ツールらしい。もしかすると、名刺管理用か?

unhtml.pl
 HTMLのtagを外す

uu
uun.pl
 Mailから複数パートをuudecodeする

xd.pl
 汎用 hexdump 。Interactive に動きます。辞書解析用。

dailyej dailyje eiwa iwanami kojien waei
 辞書検索 kojien どこにやったかな? Librettoについて来た辞書を今でも使ってます

flup news nfuma nrepl nrefile pnews postnews sn
 ニュース投稿用script。nntp をMHの用に扱える。

ph*
 なんだこれ? やっぱりXcalendar用かな?

pn*
 お、これはSony CSLの電話代を計算するスクリプトだ...

wgrep
 あ、これは便利。grep の周辺行を表示してくれる。今のgrep の-B, -Cに相当。

Shell script も結構あるね。81 もあるのか。いいや。こんなことしているから、comma
nd line interface から抜け出すのは一生出来そうにありません。

NIDE Naoyuki

unread,
Jun 11, 2006, 9:21:41 AM6/11/06
to
私のところにはこんなのがあります。

lxpmtoppm
netpbmに含まれるxpmtoppmの代替品。xpmtoppmが、1行が長いXPMファイルを扱
えず、tgifからの使用に支障を生じたために作ったもの。自分の知らない形式の
XPMファイルなら、本来のxpmtoppmを呼び出す。

playmml
MMLからMIDIファイルへのコンバータ、mml2midのフロントエンド。mml2midの
一部として配布パッケージに含まれている。

zcat
標準入力の先頭を見て、標準入力がgzip形式かbzip2形式か判断し、gunzipか
bunzip2の適当な方を呼ぶ。入力ファイルが明示的に指定されている場合は、面
倒臭いので本来のzcatを呼ぶようになっている。前に、tarが内部で呼び出すコ
マンドとしてfjで話題にしたことがあった。

timeout
指定したコマンドが、指定した時間で実行が終わらなければ、強制終了すると
いうコマンド。perlのgetppidの仕様が変わってしまって影響を受けたコマンド
として、これもfjで話題にしたことがあった。学生の課題の採点に多用している
(jail内でシェルスクリプトで提出課題を実行して、あるべき出力との比較で採
点しているのだが、無限ループに陥る答案があるとそこで止まってしまうのを防
ぐため)。

jisconv
JIS X0208にない、いわゆる丸数字やローマ数字などを含んでいるテキストを、
JIS X0208-1990の範囲内の文字で代替するフィルタ。

dspcapture
Linuxでstraceをかけて実行したコマンドのトレース出力から、/dev/dspに出
力したバイト列を再構成するコマンド。

fsleep
selectで実現した、秒数を実数で指定できるsleep。今では本物のsleepも実数
で秒数を指定できるみたい(少なくともGNUのは)。

基本的にスクリプトは、sh(+awkなど)で書けるものはできるだけそれで書いて
しまうので、perlのは案外少ないです。どうしてもawkなどで書けなかったり書
きにくいところでちょっとだけperlを援用したシェルスクリプトなんてのもあり
ます。
ni...@ics.nara-wu.ac.jp

0 new messages