HMJRE.dllのバグ?No.11251
Buckeye さん 06/10/24 14:22
 
いつもお世話になっています。

HMJRE.dll Ver.1.79なのですが(秀丸エディタを最新版にしているので、こちら
もおそらく最新版なのだろうと思いますが)、正規表現で英語大文字のみを指定
しているはずなのにそれ以外が一部ヒットするというわけのわからない現象に出
会いました。

検索に用いた正規表現「^[A-Z]+\n」

行頭から行末まで、英大文字のみの行を削除しようとしたもので、もちろん、行
頭から行末まで英大文字だけの行はヒットするのですが、それ以外に、なぜか、

Intel

という行がヒットします。他にも、大文字小文字が混じっている行の一部がヒッ
トします。全部ではなく一部なのですが、どういう条件だとヒットするのかは、
ヒット文字列を眺めても法則性が把握できませんでした。

Best regards,
Buckeye

[ ]
RE:11251 HMJRE.dllのバグ?No.11252
秀丸担当 さん 06/10/24 14:52
 

同じようにしてやってみましたが、再現させることができませんでした。
大文字小文字の変換は秀丸エディタ本体側に問題がある可能性もあります。

検索ダイアログの各オプションはどのようになっているでしょうか。
「大文字/小文字の区別」は有効になっているでしょうか。
上候補、下候補でヒットするのでしょうか。検索文字列の強調だけがヒットした
ように見えるとか?

たぶん再現するのが難しそうなので、もし差支えなければ[その他]→[設定内容
の保存/復元]より設定内容をファイルに保存したものと、問題の起きるサンプル
となるファイルを送っていただけるとこちらでも確認できるかもしれません。
もし送っていただける場合、xxxxxxxx@nifty.ne.jp まで秀丸担当宛であること
を書いておくっていただけると助かります。

[ ]
RE:11252 HMJRE.dllのバグ?No.11253
秀まるお さん 06/10/24 15:26
 
 いわゆる「再現性」がどうなのか分からないとなんとも調査が難しいような気
がします。例えばその"Intel"にヒットした直後にもう一度同じ検索をしてみる
と相変わらずIntelにヒットするのかどうか、例えばそこで一度秀丸エディタを
終了してもう一度同じファイルを開いて検索したら繰り返しヒットするのかどう
かとか…。

 その辺も出来れば教えて欲しい所です。

[ ]
RE:11252 HMJRE.dllのバグ?No.11254
Buckeye さん 06/10/24 15:29
 
秀丸担当さん、

ご依頼のファイルを用意して送ろうとしている途中にふと気づいたことがありま
す。

もしかして、HMJRE.dllで正規表現検索をするとき、「大文字・小文字を区別し
ない」がデフォルトなのでしょうか。Perlなどでは、デフォルトでは大文字・小
文字が区別され、同一視するなら明示的に指定しなければならないので、HMJRE.
dllもそうなのだと思いこんでいました。ヘルプを見ても特に記載がないようで
すが、「大文字/小文字の区別」にチェックを入れるとヒットしなくなるなど、
動作からは上記のようになっているとしか思えません。

Best regards,
Buckeye

[ ]
RE:11254 HMJRE.dllのバグ?No.11255
秀丸担当 さん 06/10/24 15:54
 

>もしかして、HMJRE.dllで正規表現検索をするとき、「大文字・小文字を区別し
>ない」がデフォルトなのでしょうか。Perlなどでは、デフォルトでは大文字・小
>文字が区別され、同一視するなら明示的に指定しなければならないので、HMJRE.
>dllもそうなのだと思いこんでいました。ヘルプを見ても特に記載がないようで
>すが、「大文字/小文字の区別」にチェックを入れるとヒットしなくなるなど、
>動作からは上記のようになっているとしか思えません。

V3.xxまでは、正規表現は必ず大文字小文字区別していましたが、V4.00から区別
なしもできるようになりました。
hmjre.dllでなくても秀丸エディタのほうで変換してdllは何でもいけると思いま
す。

検索ダイアログでは、デフォルトも何もなく見た通りです。

マクロでは、searchdownなどで、regularだけを指定した場合は区別するのがデ
フォルトです。

いずれにしても区別する場合があったりなかったりという不安定なことがあると
したら不具合だと思いますが。
そうではなくやっぱり区別しないで一貫した動作だったということでしょうか。

[ ]
RE:11254 HMJRE.dllのバグ?No.11256
アルビレオ さん 06/10/24 15:58
 
ユーザーのアルビレオです。

>もしかして、HMJRE.dllで正規表現検索をするとき、「大文字・小文字を区別し
>ない」がデフォルトなのでしょうか。

ダイアログから検索しているのなら「大文字・小文字の区別」にチェックが入っ
ているかどうかを反映します。
つまり指定を省略する方法がないので「デフォルトがどちらか」というのは意味
がないと思います。

マクロでは
>正規表現(regular)の指定があるときは自動的にcasesenseの指定になり
と書かれているのでデフォルトは「区別する」ですね。

[ ]
RE:11255 HMJRE.dllのバグ?No.11257
Buckeye さん 06/10/24 16:23
 
秀丸担当さん、

動作が不安定といった話ではなく、単純に、使い方を私が誤解していたという話
だと思います。

>V3.xxまでは、正規表現は必ず大文字小文字区別していましたが、V4.00から区別
>なしもできるようになりました。

あ、やっぱり。昔は秀丸も大文字・小文字を区別していたはずだよなぁと思った
ら、やはりそうだったんですね。よく使うものはマクロにしてしまいましたし、
区別しない正規表現とすることが多く([a-zA-Z]というような書き方をしてまし
た)、今まで、このあたりをきちんと把握せずに使い続けていたようです。

提案としては、ヘルプの「正規表現」と「検索」「置換」の項目に、正規表現を
使うとき、ダイアログからなら「大文字・小文字の区別」が反映される旨、書い
ておいたほうがいいだろうと思います。私の場合は、Perlの正規表現と昔の状態
から思いこんでしまっていたので、今さら、ヘルプのこの部分など読まなかった
わけですが、Perlなどで正規表現をよく知っており、正規表現が使えるエディタ
として秀丸を使い始めたような人には、この辺りに書いておくことによって間違
いを減らせそうに思います。

Best regards,
Buckeye

[ ]
RE:11256 HMJRE.dllのバグ?No.11258
Buckeye さん 06/10/24 16:23
 
アルビレオさん、

まあ、この辺りは半分、言葉遊びのようになってしまいますが……

>つまり指定を省略する方法がないので「デフォルトがどちらか」というのは意味
>がないと思います。

いや、「大文字・小文字の区別」にチェックなしというのが、指定なしの状態で
あり、指定なしのケースをデフォルトと呼ぶ、という解釈は、それなりの範囲の
人がするものでしょう(Perlでiオプションをつけるかつけないかと同じですか
ら)。もちろんそれとは異なる定義を用いることはかまわないわけですが、定義
が明記されていない状態では、他の人がどのように判断するのかはコントロール
できません。というわけで、ヘルプなりには明確に書いておくべきではないかと
思います。

Best regards,
Buckeye

[ ]
RE:11257 HMJRE.dllのバグ?No.11259
秀丸担当 さん 06/10/24 16:50
 

>動作が不安定といった話ではなく、単純に、使い方を私が誤解していたという話
>だと思います。

そうでしたか。それならばよかったです。

初めて使う人は、たぶん当たり前のように反映されるものだと思うと思います。
V3.xx以前より使い続けている人は、先入観があるかもしれません。
ヘルプには追記しておこうと思います。

[ ]
RE:11258 HMJRE.dllのバグ?No.11260
アルビレオ さん 06/10/24 17:16
 
アルビレオです。

>いや、「大文字・小文字の区別」にチェックなしというのが、指定なしの状態で
>あり、指定なしのケースをデフォルトと呼ぶ、という解釈は、それなりの範囲の
>人がするものでしょう

うーん、Buckeyeさんは正規表現OFFのときに「大文字・小文字の区別」にチェッ
クが入っていなければどう考えるでしょうか?
正規表現がONかOFFかで「大文字・小文字の区別」のチェックの意味が変わるの
はものすごくわかりにくくて混乱するだけですよね。

以前正規表現で「大文字・小文字の同一視」ができなかったころは、正規表現を
OFFにすると「大文字・小文字の区別」はグレーアウトして選択できなくなって
いました。
同一視ができるようになったことで「大文字・小文字の区別」と「正規表現」は
個別に指定できる等価なオプションになったわけです。

そういう過去の経緯を知らなくても、正規表現オプションとは独立したものなの
だから正規表現のON/OFFに関わらず「〜を区別する」という項目なら「ONなら区
別、OFFなら同一視」と解釈するのが自然でしょう。
OFFであればデフォルトの動作と解釈できるケースは確かに存在しますが、この
ダイアログで「デフォルト」という発想が出てくるのは、率直に言って先入観で
頭が固くなっているだけなように思えます。

注意書きを書くなとまでは言いませんが、そこまでする必要があるものなのかな
ぁという気がしますね。

[ ]
RE:11260 HMJRE.dllのバグ?No.11261
Buckeye さん 06/10/24 18:49
 
アルビレオさん、

今のダイアログでやるなら、今のパターンしかないだろうし、昔から使われてい
る今のダイアログを変えなきゃいけないほどのものじゃないだろうとは思います
よ。

>うーん、Buckeyeさんは正規表現OFFのときに「大文字・小文字の区別」にチェッ
>クが入っていなければどう考えるでしょうか?

正規表現オフなら、ふつうの検索、ですよ。で、普通の検索なら、「大文字・小
文字の区別」をしたりしなかったりのオプションがあるわけです。このオプショ
ンがないと、普通の検索では大変なことになりますしね。

これに対し、正規表現オンなら、正規表現による検索であり、大文字・小文字に
ついては区別、です。「大文字・小文字を区別しない」というオプションがない
ので、ダイアログでは大文字・小文字は常に区別なんだと思ってました。正規表
現なら書き方次第で対応できるので、それならそれで別に困りませんし、そうい
うものだと思ってました。

つまり、正規表現をチェックしたとき、秀丸の検索・置換というものを優先的に
考えるのか、正規表現を優先的に考えるのか次第だというわけです。で、私はつ
いつい正規表現のほうを優先的に考えてしまいますし、正規表現というとどうし
てもPerlの正規表現を基準に考えてしまいます。そういう意味では、

>そういう過去の経緯を知らなくても、正規表現オプションとは独立したものなの
>だから正規表現のON/OFFに関わらず「〜を区別する」という項目なら「ONなら区
>別、OFFなら同一視」と解釈するのが自然でしょう。
>OFFであればデフォルトの動作と解釈できるケースは確かに存在しますが、この
>ダイアログで「デフォルト」という発想が出てくるのは、率直に言って先入観で
>頭が固くなっているだけなように思えます。

というのはまさしくそのとおりなわけです。

ただ、私が言っているのは、先入観で頭が固くなっているのが私だけでないなら、
説明を入れたほうがいいよということなわけです。で、実際問題、秀丸のヘルプ
や関連書籍を書いた方の中にも先入観で頭が固くなっている方がおられるように
思います。それは、正規表現では大文字・小文字を区別するという意識が秀丸の
ヘルプや関連書籍の記述にも表れていることからわかります。

秀丸のヘルプでは……目次− 検索系コマンド− 正規表現−キャラクタクラスの
説明において、↓とあります。

-----------------
[a-z^0-9]
このように表現すると、半角の小文字アルファベットとカレットと半角の数字に
マッチします。
-----------------

    秀丸ヘルプの正規表現の項目において、大文字・小文字の区別に関して明確
    に記述されているところは、どうも、上記のみのようです。ここにこう書か
    れているということは、「正規表現においては大文字・小文字が区別され
    る」というに等しいと思いますが、違うでしょうか。なお、ダイアログにお
    ける「大文字・小文字の区別」が正規表現に影響するという説明はどこにも
    ありません。

また、秀丸エディタハンドブックの初版でも、キャラクタクラスの説明や例では、
すべて、大文字・小文字を区別することが前提の書き方になっています。正規表
現による検索や置換に「大文字・小文字の区別」のチェックが影響するという説
明はないようです。それどころか、その前、30ページ近くにわたる実例でも、正
規表現にはチェックが入っているだけで「大文字・小文字の区別」にはチェック
がありません。で、検索文字列は大文字・小文字が検索対象に揃えてきちんと区
別して書かれていたりします。

    ↑ここも不親切。前のページから普通に読んで勉強してきたら、正規表現に
    チェックあり、「大文字・小文字の区別」にチェックなしで大文字・小文字
    が区別されると思うのが普通だと思います。まあ、不親切というか、書いた
    人の意識が私に近かったから、つい、こういう説明を書いてしまったんだと
    思いますが。

    その他にもいろいろと本が出ているようですが、たまたま手元にあったもの
    が上記の本だったので。他の本では、きちんと説明されているようならいい
    んですが……

こういう意識を持つ人がそこそこいるようだという背景には、デフォルトで大文
字・小文字を区別するPerlの影響が強くあるのかなと思います(私は完全にコレ
です)。VBScriptのようにIgnorecase=Trueがデフォルトというものもあって、
「正規表現=大文字・小文字区別」とは限らないわけですから。

Best regards,
Buckeye

[ ]
RE:11261 HMJRE.dllのバグ?No.11262
Buckeye さん 06/10/24 19:47
 
>正規表
>現なら書き方次第で対応できるので、それならそれで別に困りませんし、そうい
>うものだと思ってました。

というのはちょっと言い過ぎですね(^^;)

正規表現でも、大文字・小文字を区別しないというオプションがないと、大変な
のは大変です。書けないことはありませんが。

Best regards,
Buckeye

[ ]
RE:11260 HMJRE.dllのバグ?No.11263
Buckeye さん 06/10/24 20:14
 
誤解してしまう人が少数派であっても一定数存在するなら説明しておくべきとい
う考え方は変わりませんが、アルビレオさんの
>そういう過去の経緯を知らなくても、正規表現オプションとは独立したものなの
>だから正規表現のON/OFFに関わらず「〜を区別する」という項目なら「ONなら区
>別、OFFなら同一視」と解釈するのが自然でしょう。

も、それはそれで一理あるんですよね。

で、ふと思ったんですが、それならば、他のオプションも正規表現オプションと
は独立したものとして利用できるのでしょうか。あいまい検索はできますね。横
線で分離された下側もみんな可能。でも、「単語の検索」については秀丸ヘルプ
の複数箇所に使えないとはっきり書いてあります。

「目次−検索系コマンド 」
---------------
ただし、正規表現を使用するかあいまい検索を使用するのオプションがチェック
状態になっている場合は、単語の検索にはなりません。
---------------

「目次− 検索系コマンド−単語の検索」
---------------
検索ダイアログボックスでは自動的に単語の検索チェックボックスがチェックさ
れますが、正規表現を使用するかあいまい検索を使用するチェック状態になって
いると単語の検索になりません。
---------------

……と言いつつ、念のため動作を確認してみると……なんか、「正規表現」オプ
ションとは独立に「単語の検索」オプションも使えるようですねぇ。「a+」で正
規表現検索すると、aaaにもaaabbbのaaa部分にもヒットします。でも、「単語の
検索」オプションにチェックを入れると、aaabbbのaaa部分にはヒットしなくな
るようです。aaa123だと、動作環境の設定に従って、「単語の検索」オプション
でaaa部分がヒットしたりヒットしなかったりするようです。

仕様としてはどちらでもいいと思いますけど、ヘルプと現実の対応はとっておく
必要がありますよね。

Best regards,
Buckeye

[ ]
RE:11262 HMJRE.dllのバグ?No.11264
Iranoan さん 06/10/24 20:53
 
 Buckeye さん、アルビレオさん今日は、Iranoan です。

 アルビレオさんへ
> 以前正規表現で「大文字・小文字の同一視」ができなかったころは、正規表現を
> OFFにすると「大文字・小文字の区別」はグレーアウトして選択できなく
> ~~~
 これは、
以前正規表現で「大文字・小文字の同一視」ができなかったころは、正規表現を
ON にすると「大文字・小文字の区別」はグレーアウトして選択できなく
~~
の間違いですよね(^^)。
 なお、更に補足しておくと、正規表現を ON にすると「大文字/小文字の区
別」も ON にしつつ選択不可になりました。その為、後から正規表現を OFF
にしても「大文字/小文字の区別」も ON のままなので、戸惑ったことが有り
ました。
 ##そう言えば、昔はあいまい検索と正規表現も同じような関係がありました
ね。今でも、Jre32.dll なら「あいまい検索」を ON にすると、「大文字/小
文字の区別」も ON で選択不可になりますね。

 Buckeye さんへ
> そういう過去の経緯を知らなくても、正規表現オプションとは独立したものなの
> だから正規表現のON/OFFに関わらず「〜を区別する」という項目なら「ONなら区
> 別、OFFなら同一視」と解釈するのが自然でしょう。
<snip>
> 率直に言って先入観で
> 頭が固くなっているだけなように思えます。
>
> 注意書きを書くなとまでは言いませんが、そこまでする必要があるものなのかな
> ぁという気がしますね。
 「先入観≒Perl を使っていたときの慣れ」だとは私も思いますが、ヘルプに
一度書くことで、結果的に秀丸担当さんのサポートの手間が減るのならそれも
良いと思います。
 ただ今回の Buckeye さんの書き込みを読んでも解るのですが、「思い込ん
でしまっている人が、はたしてヘルプをちゃんと読むのかなあ〜。読む前に質
問するか、秀丸を初めて使う人なら「使えなーい」と逆ギレ→アンインストー
ル」となる気もします(^^)。

> これに対し、正規表現オンなら、正規表現による検索であり、大文字・小文字に
> ついては区別、です。「大文字・小文字を区別しない」というオプションがない
> ので、ダイアログでは大文字・小文字は常に区別なんだと思ってました。正規表
> 現なら書き方次第で対応できるので、それならそれで別に困りませんし、そうい
> うものだと思ってました。
はやはり先入観ですよ。検索に限らず、設定でも否定形で書かれていなければ、
ON はする、OFF はしないでしょ。
 Perl と比較されていますが、Perl はコードを書いておくか、CUI でその場
でも字を入力するので、「大文字小文字を区別する」がデフォルトなのは自然
ですが、秀丸はそうではありません。マクロでなければ、検索であれ置換であ
れ、オプションを指定するダイアログが必ずでてきます。そしてここでは、
「大文字/小文字の区別」が有るので、OFF なら、大文字/小文字の区別しない
と判断するのが多数でしょう。正規表現のオプションだけ他のオプションから
特別視してしまう時点で、先入観が働いていると思います。

> また、秀丸エディタハンドブックの初版でも、
 そもそもこの本が、はたして Ver.4.xx 以降の動作をチェックして書かれて
いるか疑問です。執筆開始から発行まで半年程度かかるのは有り得そうですか
ら。あと「ここにこう書いてあるから〜」式の話としては、サイトー企画さん
が関与していない出版物なので、ここで取り上げでも...。

> 誤解してしまう人が少数派であっても一定数存在するなら説明しておくべきとい
> う考え方は変わりません
 先に書いたとおり。基本的に同意。ただ誤解した人がヘルプを読むと思うか
と聞かれると...。

> -----------------
> [a-z^0-9]
> このように表現すると、半角の小文字アルファベットとカレットと半角の数字に
> マッチします。
> -----------------

> ふと思ったんですが、それならば、他のオプションも正規表現オプションと
> は独立したものとして利用できるのでしょうか。
<snip>
> 仕様としてはどちらでもいいと思いますけど、ヘルプと現実の対応はとっておく
> 必要がありますよね。
についてですが 「Ver.3.xx までの記述をそのままになっているだけ、細かい
ことは意識されていない、というかそう言った記述があったことを秀丸担当さ
んご自身覚えていなかった」が真相な気がします(^^)。もちろん
> ただし、正規表現を使用するかあいまい検索を使用するのオプションがチェック
> 状態になっている場合は、単語の検索にはなりません。
は、実際に動作が異なるので、書き直す必要があると思います。

 また、実際はあいまい検索と正規表現は使用する DLL に依存します。
Jre32.dll と HmJre.dll は公式 DLL ですが、違いを全てヘルプに書いている
と、冗長でかえって解りにくくなるかもしれません。非公式 DLL はおそらく
オプションと連動しない DLL も存在するでしょうし。

[ ]
RE:11264 HMJRE.dllのバグ?No.11265
Buckeye さん 06/10/24 21:42
 
Iranoanさん、

> また、実際はあいまい検索と正規表現は使用する DLL に依存します。
>Jre32.dll と HmJre.dll は公式 DLL ですが、違いを全てヘルプに書いている
>と、冗長でかえって解りにくくなるかもしれません。非公式 DLL はおそらく
>オプションと連動しない DLL も存在するでしょうし。

それはそうだろうと思いますし、そこまでヘルプで網羅しなくてもいいだろうと
も思います。公式DLLについてきちんと説明されていればそれで十分かと。非公
式なものは非公式なのだから、使う人の責任でやってね、でいいでしょう。なん
でもかんでも書いて量が増えすぎると、それもまた、読んでもらえないという事
態を引き起こしますから。

> ただ今回の Buckeye さんの書き込みを読んでも解るのですが、「思い込ん
>でしまっている人が、はたしてヘルプをちゃんと読むのかなあ〜。

読まない人が多いでしょうね。でも、読む人もいるので、そういう人に対して効
果があればそれなりなのではないかと。今回の私も、動作がおかしいと思った時
点でヘルプにざっとは目を通しています。ただ、その時点では思いこみがあった
ので、明記されていないヘルプを見ても何もわからなかったわけです。「大文
字・小文字の区別」が影響しないとも書いてないので、独立したオプションとし
て使えるという解釈がなり立つ、というのはそのとおりですが、それではわから
ないにはわからない説明にしかなりません。逆に明記されていれば、今回のスレ
ッドは立たなかったはずです。

>> また、秀丸エディタハンドブックの初版でも、
> そもそもこの本が、はたして Ver.4.xx 以降の動作をチェックして書かれて
>いるか疑問です。執筆開始から発行まで半年程度かかるのは有り得そうですか
>ら。あと「ここにこう書いてあるから〜」式の話としては、サイトー企画さん
>が関与していない出版物なので、ここで取り上げでも...。

サイトー企画さんが関与していない出版物だというのは、まあ、そうなんですけ
どね。ただ、秀丸のダウンロードページでも紹介されている出版物ですし、サイ
トー企画さんが関与している・していないは、先入観による思いこみをしてしま
う人が私のほかにいるかどうかの例証には関係ありませんから。

    本については、一応、Ver.4.xxをベースということになっているようです。
    ただ、時間があまりなかったので、すべてを網羅はできてないかもっていう
    但し書きはありますが。

Best regards,
Buckeye

[ ]
RE:11263 HMJRE.dllのバグ?No.11268
秀丸担当 さん 06/10/25 09:33
 

>で、ふと思ったんですが、それならば、他のオプションも正規表現オプションと
>は独立したものとして利用できるのでしょうか。あいまい検索はできますね。横
>線で分離された下側もみんな可能。でも、「単語の検索」については秀丸ヘルプ
>の複数箇所に使えないとはっきり書いてあります。

これはヘルプの間違いでした。
Iranoanさんの言われる通り、昔の記述が残ったままになっていました。
ご指摘ありがとうございます。
修正しておきます。

[ ]