[sylpheed-jp:11374] Re: Sylpheed 3.5 メール振り分けで正規表現が動作しない?

Hiroyuki Yamamoto hiro-y @ kcn.ne.jp
2016年 2月 3日 (水) 10:59:57 JST


山本です。

On Tue, 2 Feb 2016 21:50:59 +0900
IWAMOTO Kouichi <sue @ iwmt.org> wrote:

> On Tue, 2 Feb 2016 19:17:10 +0900
> Kenji Enomoto <k-eno @ mars.dti.ne.jp> wrote:
> 
> > ★正規表現を使用した振り分け設定例
> > (件名にFで始まるアルファベット3文字+数字5桁が含まれている)
> >   名前  Fxx
> >   次の条件のすべてが該当する場合
> >   Subject, が次の正規表現にマッチ, .*F[A-Z][A-Z]\d{5}
> 
> r3481 の変更の影響のようですね。
> 
> 2015-08-07
> 
>         * libsylph/filter.c: strmatch_regex(): use Oniguruma native API
>           to prevent crash on Ubuntu 14.04.
> 
> 上記変更で POSIX 互換 API から鬼車ネイティブ API を使うようになっています。

Ubuntu 14.04 で regcomp()/regexec() を呼んだときにどうも鬼車のほうでなく
libc のほうを呼んでしまっている節があったため、この修正を入れました。

> 鬼車のソースを確認すると、POSIX 互換 API の regcomp() で REG_EXTENDED を
> 指定した時は POSIX 拡張正規表現ではなく、Ruby の正規表現となるようなので、
> 意図せずに \d が使えてしまっていたという事のようです。
> そして前述の変更で POSIX 拡張正規表現を使うようになったので、\d が使えなく
> なっています。

コードを確認したら、 REG_EXTENDED のときは syntax が
OnigDefaultSyntax = ONIG_SYNTAX_RUBY となるので、
Ruby の正規表現になっていたということですね。

        ret = onig_new(&reg, ptn, ptn + strlen(needle),
                       ONIG_OPTION_IGNORECASE,
                       ONIG_ENCODING_UTF8, ONIG_SYNTAX_POSIX_EXTENDED,
                       &err_info);

の ONIG_SYNTAX_POSIX_EXTENDED を ONIG_SYNTAX_RUBY (ONIG_SYNTAX_DEFAULT)
にすれば以前の動作になるということですね。

libc の regex とできるだけ同じ動作になるようにこのような指定にしたのですが、
せっかく鬼車を使っているので Ruby の正規表現を使えるようにしたほうが
よさそうです。

-- 
Hiroyuki Yamamoto <hiro-y @ kcn.ne.jp>


Sylpheed-jp メーリングリストの案内