HmJre 最短一致・タグ付き置換に不具合No.02973
IKKI さん 03/09/11 00:55
 
IKKI です。いろいろまとめてバージョンアップ、お疲れさまでした。

HmJre.dll で最短一致(ものぐさマッチ)を使った場合、タグ付き置換がうまくいか
ないようです。たとえば

  検索: <A HREF=\f.+?\f[ >]
  置換: \1

を実行すると「<A HREF=../link/index.html>」が「.」(ピリオド1個)に置換され
てしまいます。

ご確認のほどよろしくお願いいたします。
(秀丸β16 + HmJre.dll v0.14 + Win2000)

[ ]
RE:02973 HmJre 最短一致・タグ付き置換にNo.02992
秀まるお さん 03/09/12 19:54
 
 返事が遅れてすみません。

 タグ付き正規表現での最短一致については、たしかに現状の動作ではまずいよ
うです。

 果たしてどう直せばいいか今のところ見当が付きませんが、なんとか直すしか
なさそうです。

 少々お待ちください。

[ ]
RE:02992 HmJre 最短一致・タグ付き置換にNo.03012
秀まるお さん 03/09/19 16:08
 
 今さらのお返事ですが、直りました。

 タグ付き正規表現での区切り位置を探す処理では、\fで区切られた2つの正規
表現パターンの両方が一致する区切り位置を探するための何度も検索しなおす処
理があるんですが、そこで、\fの前方パターンの最終の「?」に限って除去する
ようにしました。

 今回のパターンだと、

 前方:    <A HREF=.+?
 後方:   [ >]

 という検索をして区切り位置がヒットしなかったんですけど、これを

 前方:    <A HREF=.+
 後方:   [ >]

 に変換して検索するようにしたら直りました。

 たぶんこれで(他のパターンについても)問題ないと思います。

[ ]
RE:03012 HmJre最短一致・タグ付き置換にNo.03014
IKKI さん 03/09/19 22:26
 
IKKI です。

>  タグ付き正規表現での区切り位置を探す処理では、\fで区切られた2つの正規
> 表現パターンの両方が一致する区切り位置を探するための何度も検索しなおす処
> 理があるんですが、

なるほど、そういうことでしたか。どうもお疲れさまでした。

#タグ付き正規表現の実装って面倒だったんですね。こういう処理はアプリ側でなく
 DLL 側に実装するのが正道だと思いますけど、 JRE32 互換にこだわるとそうもいか
ないのか…。

> そこで、\fの前方パターンの最終の「?」に限って除去するようにしました。

わかりました。もしまた怪しい挙動を見つけたら、このことを念頭に置いて解析して
みます。

[ ]