hmjre.dllの仕様確認No.25866
colder さん 08/12/19 14:58
 
hmjre.dllの仕様について幾つか確認です。
ヘルプには、16進数での文字指定は
1〜2桁とありますが1桁の指定はできないようです。

改行文字\nを使った場合の正規表現
"\n$"
では次行が空行である場合のみ改行文字にマッチしますが、
16進での改行文字指定+行終端を表す正規表現
"\x0a$"
は次行に空行がない改行文字にもマッチします。
この動作の違いは、どうしてなのでしょう?

以下の正規表現
"foo.*,bar" …… (1)
"foo.*?,bar" …… (2)
の両者とも
"foo,bar,baz" …… (a)
"foo,baz,bar" …… (b)
(a)、(b)のどちらにもマッチしますが
(1)、(2)のbar以前を前方一致にした正規表現
"(?<=foo.*,)bar" …… (3)
"(?<=foo.*?,)bar" …… (4)
では、(3)の正規表現が(a)に、(4)の正規表現が(b)にマッチしなくなります。
この動作は、仕様でしょうか?

[ ]
RE:25866 hmjre.dllの仕様確認No.25868
秀まるお2 さん 08/12/19 16:02
 
 HmJre.dllの担当部分だけお返事させていただきますと…

> ヘルプには、16進数での文字指定は
> 1〜2桁とありますが1桁の指定はできないようです。

 これはたぶんですが、HmJreの前のJRE32.DLLの時には1桁もアリだったのが、
僕がHmJre.dllを作る時に2桁オンリーにしてしまったのだと思います。

 今から仕様変更するのはちょっとまずいと思うので、すみませんが「2桁セッ
トでしか指定出来ない」という仕様ということでお願いします。

 ヘルプの方は秀丸担当の方で将来修正させていただきます。

> "(?<=foo.*,)bar" …… (3)
> "(?<=foo.*?,)bar" …… (4)
> では、(3)の正規表現が(a)に、(4)の正規表現が(b)にマッチしなくなります。
> この動作は、仕様でしょうか?

 一応これはバグと言うしか無いように思いますが、直すのがちょっと難しいで
す。

 次の秀丸エディタVersion 8系のβテストを開始する段階までになんとか修正
させていただきたいと思います。(β版でテストしていただかないとちょっと怖


 現状では、(?<=....)のような指定の中に可変長にマッチするような指定をす
ると、うまくヒットしない可能性があるという風な制限事項を付け加えさせてい
ただくしか無いです。すみません。

 なんとか直します。

[ ]
RE:25866 hmjre.dllの仕様確認No.25869
秀丸担当 さん 08/12/19 16:09
 

>hmjre.dllの仕様について幾つか確認です。
>ヘルプには、16進数での文字指定は
>1〜2桁とありますが1桁の指定はできないようです。

これはjre32.dllのときはできていたようですが、hmjre.dllでは2桁固定という
ことでお願いします。
ヘルプは次のバージョンを出すときには修正させていただきます。


>改行文字\nを使った場合の正規表現
>"\n$"
>では次行が空行である場合のみ改行文字にマッチしますが、
>16進での改行文字指定+行終端を表す正規表現
>"\x0a$"
>は次行に空行がない改行文字にもマッチします。
>この動作の違いは、どうしてなのでしょう?

ヘルプの正規表現の「\nを使った複数行検索の際の制限について 」のところに
詳細が書いてありますが、「\n」という文字の数を数えて対象となる文字列が変
わるので、こうなってしまいます。
これも仕様ということでお願いします。

[ ]
RE:25866 hmjre.dllの仕様確認No.25871
ENCODINGSHIFTJIS さん 08/12/19 16:24
 
>hmjre.dllの仕様について幾つか確認です。
>ヘルプには、16進数での文字指定は
>1〜2桁とありますが1桁の指定はできないようです。
やってみた、8進数も3桁固定らしい。


>改行文字\nを使った場合の正規表現
>"\n$"
>では次行が空行である場合のみ改行文字にマッチしますが、
>16進での改行文字指定+行終端を表す正規表現
>"\x0a$"
>は次行に空行がない改行文字にもマッチします。
>この動作の違いは、どうしてなのでしょう?

ヘルプの  \nを使った複数行検索の際の制限について
からの解釈では、
秀丸は \n が入っている時のみ 複数行検索する
入っていないと 一行単位に動作するから では。


>では、(3)の正規表現が(a)に、(4)の正規表現が(b)にマッチしなくなります。
>この動作は、仕様でしょうか?

(?<=foo).*,bar
(foo.*,)bar
前方参照でなければ ヒットしますね、ゼロ幅の中にゼロ幅だから?

[ ]
RE:25871 hmjre.dllの仕様確認No.25872
ENCODINGSHIFTJIS さん 08/12/19 16:39
 
+ も *と同様に前方参照中では 謎です。

"foox,bar,baz" …… (a)
"foo,bar,baz" …… (a)
"foo,baz,bar" …… (b)

のテストデータに対して

(?<=foo.{0,4},)bar
(?<=foo.{0,3},)bar

のパターンでは結果が違うような、バックトラック回数に上限が
あるよう な気が

[ ]
RE:25868 hmjre.dllの仕様確認No.25873
秀まるお2 さん 08/12/19 17:20
 
 (?<=xxxxx)の中が可変長になるケースについてのバグですが、とりあえず直す
ことに成功しました。

 もし必要でしたら個別にアップロードしてもいいので、その場合は連絡いただ
きたいと思います。

 僕の方でしばらくテストおよびソースコード見直しなどもやります。

[ ]
RE:25871 hmjre.dllの仕様確認No.25874
ENCODINGSHIFTJIS さん 08/12/19 17:49
 
ちなみに EmEditor では
ゼロ幅の中にゼロ幅 などのパターンは 「不正な式」と ダイアログを
出して 弾きます。 対話編集のソフトですから 無理はしないのかも。

[ ]
RE:25874 hmjre.dllの仕様確認No.25878
秀まるお2 さん 08/12/20 11:30
 
 EmEditorその他の仕様はよく知らないんですが、今度暇な時にでも確認してみ
ようと思います。

[ ]