一覧での正規表現検索で、行頭のヒットのNo.07562
ながまる さん 21/01/15 17:14
 
メール一覧や検索フォルダの検索条件で正規表現を使った場合と、
秀丸エディタやメールエディタ内で正規表現を使った場合で、
行頭ヒットの挙動に差がでています。

例えば、本文が以下のような内容であるメールがあったとします。

--------

foo
bar
foobar

--------

このとき、

^bar

という検索クエリであれば、メール一覧、エディタ内どちらも同じ様にヒットします。

ところが、

(?<=^)bar
(^b|uzb)ar

のように、前方一致や、グループ化の括弧の中に行頭が含まれると、メール一覧の方
でのみヒットしなくなります。


上記の例だと、前方一致の括弧で括る意味はありませんが、実例では以下のようにも
うちょっと前方一致のカッコ内で複雑な条件を入れて使っています。

他の OR 条件との兼ね合いで「引用行は除外する」オプションを使えないときに、行
頭に引用の文字が入っていない行内の任意の位置の文字列部分にのみヒットさせる例:

(?<=^(?!>|\|).*)fuga

※これもこれで、前方一致を外しても想定されるメール単位の検索結果は変わりませ
んが…、 強調表示の位置などが変わってきます。


メール一覧や検索フォルダの検索条件では、対象を 「本文」,「すべてのヘッダと本
文」,「簡略ヘッダ+本文」のいずれかを使っています。

正規表現ライブラリは、いずれも HmJre.dll V5.09 で同じです。
秀丸メールは 6.97, 秀丸エディタは 8.95 です。

[ ]
RE:07562 一覧での正規表現検索で、行頭のNo.07563
秀まるお2 さん 21/01/15 17:56
 
 バグでお手数かけてすみません。&詳しく検証いただきありがとうございます。

 調べてみたら、一応これは秀丸メール側のバグのようでした。なので次のバージョ
ン(正式版になるかもしれない)で修正させていただきます。

 詳しい事情を説明させていただきますと・・・・

 まず、HmJre.dll側での「^」は、行頭にヒットするというよりは、渡された検索文
字列の先頭にヒットするって作りになってます。なので、「^」を使ってる場合には、
秀丸メール側で1行単位でメール本文を渡して検索させるような処理をしないといけ
ないです。

 その、「1行単位で検索させるか、それとも全体を渡して検索させるか」の判定が、
「検索文字列の先頭が"^"かどうか」みたいな単純な処理になってしまってました。
それを、ちゃんと「検索文字列の中に"^"を含むかどうか」に修正すれば大丈夫だと
思います。

 ちなみに

   ^bar\nfoobar

 みたいな指定をしてもちゃんとヒットするように、検索文字列に含む改行の数の分
だけ複数行のデータをHmJre.dllに渡すような処理もちゃんとしてたんですが、(?#ma
xlines:nnnn)の指定には対応してないようでして・・・。それも対応しようと思いま
す。

[ ]
RE:07563 一覧での正規表現検索で、行頭のNo.07564
ながまる さん 21/01/15 23:15
 
原因調査ありがとうございます!
ご都合の良いタイミングで、修正いただくようお願いします。

[ ]
RE:07564 一覧での正規表現検索で、行頭のNo.07581
秀まるお2 さん 21/01/21 08:27
 
 報告し忘れてましたが、一応この問題対応したバージョンをVerrsion 6.98β3とし
て昨日アップロードした所でした。

32bit版:
https://hide.maruo.co.jp/software/bin3/hmmail698b3_signed.exe

64bit版:
https://hide.maruo.co.jp/software/bin3/hmmail698b3_x64_signed.exe

[ ]
RE:07581 一覧での正規表現検索で、行頭のNo.07637
ながまる さん 21/01/29 16:32
 
Verrsion 6.98 で修正されていることを確認しました。
ご対応いただきありがとうございました。

[ ]