HmJre の挙動に疑問No.06008
IKKI さん 04/09/22 13:37
 
こんにちは。 IKKI です。
HmJre の挙動に疑問があります。

// テストマクロ
insertfix " aa<bb<cc>dd";
searchdown2 "<(<[^<>]*>|[^<>])*>", regular;

を実行すると、

 ・JRE32 では <cc> にヒットする
 ・HmJre では何もヒットしない

となります。
ご確認のほどよろしくお願いいたします。

(秀丸 v4.13 + HmJre.dll v1.11)

[ ]
RE:06008 HmJre の挙動に疑問No.06011
秀まるお さん 04/09/22 18:19
 
 こちらで確認したら、たしかにHmJreだけダメでした。デバッグ環境で追いか
けた所、内部の特定の高速化の処理が関係しててヒットしなくなってるようです。
とりあえずそこの高速化処理を外したらヒットするようになりました。

 とにかくバグはバグなので修正させていただきます。ただ、単純に動作が遅く
なるのは気に入らないので、なんとか速度を落とさないような修正方法を考えた
いと思います。

 少々お待ちください。

[ ]
RE:06008 HmJre の挙動に疑問No.06012
ENCODINGSHIFTJIS さん 04/09/22 19:16
 
自己再帰パターンの、マッチ失敗した時の、カーソル進め量
が 多い場合があるみたいです
[^<>] → p
として
<p*>|<p*<p*>p*>|<p*<p*<p*>p*>p*>
展開すると
とりあえずは、マッチするみたいですが。


[ ]
RE:06011 HmJreの挙動に疑問No.06013
IKKI さん 04/09/22 21:25
 
IKKI です。

>  とにかくバグはバグなので修正させていただきます。ただ、単純に動作が遅く
> なるのは気に入らないので、なんとか速度を落とさないような修正方法を考えた
> いと思います。

わかりました。がんばってください。
リリース時にはソースコードの方も更新していただけると助かります。


> [^<>] → p
> として
> <p*>|<p*<p*>p*>|<p*<p*<p*>p*>p*>
> 展開すると
> とりあえずは、マッチするみたいですが。

展開してしまうと <p*<p*>p*<p*>p*> にマッチしなくなりますし、やはり
ペア括弧のマッチングには自己再帰パターンを使うしかないですね…。

[ ]
RE:06013 HmJreの挙動に疑問No.06014
秀まるお さん 04/09/22 22:19
 
 他にパターンを考えた所、例えば、

x_zx_zabc>

 という文字列に対して、"x_z[a-z]*>"というパターンで検索するとダメだった
りするようです。

> リリース時にはソースコードの方も更新していただけると助かります。

 ソースコード的には、Match.cppの1056行目付近の、

        Star_BigBigBreak:;
                if( xMatchMax < 0 && xStarMatchMax > x ) {
                    // xStarMatchMaxまでの領域を全部スキップさせる。
                    return -2 - xStarMatchMax;
                }

 の所のif文3行を削除すれば直ります。ただ、単純にこれを削除すると、その
分遅くなりまして…。何かいい手は無いかもうちょっと考えます。

 とりあえず、HmJreだけ先にバージョンアップさせていただきます。

[ ]
RE:06012 HmJre の挙動に疑問No.06015
encodingshiftjis さん 04/09/23 17:52
 
訂正
<(p*|<p*>)+?>
では、どうでしょう。?

[ ]
RE:06014 HmJreの挙動に疑問No.06016
秀まるお さん 04/09/24 09:49
 
 とりあえずHmJre.dllだけ単独バージョンアップしました。ということでよろ
しくお願いします。

  http://www.hidemaru.interlink.or.jp/software/bin/hmjre112.lzh


[ ]
RE:06015 HmJre の挙動に疑問No.06017
encodingshiftjis さん 04/09/24 21:36
 
正規表現パズルは、SQLパズルより、簡単にできる。
これでも、できました。
<p*(<p*>p*)*>

[ ]
RE:06016 HmJreの挙動に疑問No.06018
IKKI さん 04/09/24 23:17
 
IKKI です。

>  とりあえずHmJre.dllだけ単独バージョンアップしました。ということでよろ
> しくお願いします。

あわわ、恐れ入ります&いつもありがとうございます。 m(_ _)m
問題の正規表現を使ったマクロは秀丸 v4.14 が出てから公開することにします。


以下、雑談です。

> <(p*|<p*>)+?>
> では、どうでしょう。?

これだと <> にマッチしませんが、
<(p*|<p*>)*?> なら HmJre.dll v1.11 でも期待通りの結果になったようです。

> これでも、できました。
> <p*(<p*>p*)*>

これは p* を3つ書かなければならないのが悔しいですね。
対応するネスト数を3重、4重と増やしていくと、強調表示定義ファイルの
1行の長さ制限240バイトを簡単に超えてしまいます。

それでは。

[ ]