正規表現／あいまい検索DLL（HmJre.dll） ヘルプ もくじ（V1.71時点）

 正規表現/あいまい検索DLL（HmJre.dll） ヘルプ もくじ（V1.71時点）
基本関係
あいまい検索の設定ダイアログボックス
同一視指定ファイルの作成方法
HmJre.dllにおける正規表現

開発者向け情報
JRE32.DLL互換API
あいまい検索API（リファレンス編）
あいまい検索API（実用編）
JreFuzzy.h
マクロからのdllfunc呼び出し

その他
HMJRE.DLLの著作権、同封、配布について


 あいまい検索の設定ダイアログボックス
半角／全角を区別しない
  半角文字と全角文字を区別しないで検索します。例えば半角文字の「A」を検索して、全角文字の「Ａ」にもヒットするようにします。
  半角のカタカナと全角のカタカナも区別せずに検索するようになります。

全角文字で、ひらがなとカタカナを区別しない
  全角のひらがなと全角のカタカナを区別しないで検索します。例えばカタカナの「ア」を検索して、ひらがなの「あ」にもヒットするようにします。
  ここのオプションと「半角／全角を区別しない」の両方をONにすると、半角カタカナと全角カタカナと全角ひらがなをすべて区別せずに検索するようになります。例えばひらがなの「あ」を検索して、半角カタカナの「ｱ」にもヒットするようになります。

大きい「あ」と小さい「ぁ」を区別しない
  ひらがな／カタカナの大きい文字と小さい文字を区別しないで検索します。具体的には「あいうえおやゆよつ」の文字と「ぁぃぅぇぉゃゅょっ」を区別しないで検索します。
  全角ひらがな、全角カタカナ、半角カタカナそれぞれについて区別しないようになります。ここのオプションと他のオプションはすべて合成可能なので、例えばここのオプションと「半角／全角を区別しない」の両方をONにすれば、全角ひらがなの「あ」を検索して、全角カタカナの小さい「ｧ」にもヒットするようになります。

濁音／半濁音を無視する
  濁音／半濁音を無視して検索します。例えば「は」を検索して「ば」にも「ぱ」にもヒットするようにします。
  このオプションをONにすると、濁音／半濁音をすべて除去して検索するようになります。その副作用として、例えば濁音のみの「ﾞ」だけを検索することは出来なくなります。

かなの「ー」と英数字の「－」を同一視する
  かなの「ー」（文字コード815B）と英数字の「－」（文字コード817C）を同一の物と扱って検索します。半角の文字コードB0と文字コード2Dについても同じ扱いとします。
  かなの「～」やその他の横棒風の文字についての同一視はしません。

空白/タブ文字を無視する
  空白／タブ文字を無視して検索します。例えば「AB」を検索して、「A B」のような途中に空白の入った文字列にもヒットするようにします。半角空白、全角空白、タブ文字を無視します。
  このオプションをONにすると、空白／タブ文字をすべて除去した形で検索するようになります。その副作用として、空白やタブ文字のみを検索することは出来なくなります。

改行を無視する
  改行を無視して検索します。例えば、「AB」を検索して、行末に「Ａ」があって次の行の行頭に「B」があるような状況でもヒットするようにします。
  改行を無視すると言っても、実際に改行を完全に無視して検索するためには、検索対象のテキストファイル全体をまとめて検索しないといけなくなって、非常に都合が悪いです。そこで、「最大改行数」を別に指定しないといけません。最大改行数を多くすると、それだけ多くの改行を含んだ文字列にヒットするようになりますが、その代わり、検索速度は遅くなります。
  ここのオプションをONにすると、改行を除去した形で検索が実行されます。その副作用として、改行文字そのものを検索することは出来なくなります。

特定文字を無視する
  ユーザー側で指定された、特定の文字を無視して検索します。例えば"ABC"という指定をした場合、AとBとCの３種類の文字を無視して検索します。
  無視する対象の文字には、全角文字も含めることが出来ます。
  例えば文章中に「※1」～「※9」のような文字が混じっているとして、それを無視して検索させたい時は、"※0123456789"という文字を無視対象に指定すればいいです。
  無視する対象に指定した文字は検索できません。なので、例えば上記のような0～9すべてを無視対象に指定した場合には、数字の検索が出来なくなります。

カスタム1～カスタム4
  ユーザー側で用意した同一視指定のそれぞれを有効にするかどうか指定します。
  同一視指定用のファイルは、右側の「参照...」ボタンを押して指定します。

  同一視指定ファイルの作成方法

注：大文字／小文字の区別について
  大文字／小文字を区別するかしないかについては、あいまい検索の呼び出し元の設定に従います。あいまい検索の設定ダイアログボックス上にはこのオプションはありません。

  呼び出し元の設定で「大文字／小文字を区別しない」と指定された場合、あいまい検索側では半角英字の大文字／小文字を区別しないだけでなく、全角英字についても大文字／小文字を区別せずに検索します。


 同一視指定ファイルの作成方法
  同一視指定ファイルは、HMJRE.DLLに標準で用意されているあいまい検索よりも、さらにあいまいに検索させたい場合に指定するファイルで、ユーザー様が作成する物です。

  同一視指定ファイルは、普通のテキストファイルです。作成場所は自由ですが、なくべくHMJRE.DLLと同じ場所に置いておく方が無難かと思います。
書き方
  同一視指定ファイルには、１行内に、同一視指定したい単語を複数、空白（半角に限る）またはタブ文字で区切って指定します。 例えば、「～」と「－」を同一視させたい場合は、１行の中に、「～」と「－」の文字をタブ文字または空白で区切って指定すればいいです。
  区切り用のタブ文字または空白の個数は何個でもかまいません。

  行の途中に「//」を書くと、それ以降はコメントとして扱われます。例えば、
－ ～ // 横棒系文字の同一視
  のようにコメントを入れるのに使います。

  上記の仕様であるため、半角空白やタブ文字を含む文字列や、「//」で始まる単語を同一視指定することは出来ません。

  同一視指定する単語の１つのグループ中の単語数は、最大でも２５５個程度までです。グループの数については制限はありません。

１文字指定と複数文字指定　（別に知らなくてもいいけど）
  HMJRE.DLLは、１文字のみの単語を同一視指定した場合と、複数文字の単語を１つでも含む場合とで、内部的に別の扱いをします。

  例えば、「ー」と「「～」を同一視指定した場合、それは「１文字のみの単語の同一視指定」と見なされます。その場合、検索文字列および検索対象文字列中の「～」を、 すべて「－」に変換してから検索するような処理を行います。どちらかと言うとこちらの方が処理速度的に都合がいいです。

  逆に、例えば「ABC」と「XYZ」を同一視指定するよう指示した場合、それは「文字列の同一視指定」と扱われます。この場合、検索文字列中の「ABC」を、正規表現の「(ABC|XYZ)」に変換して検索することで処理されます。 「ABC」と「XYZ」程度ならたいしたことはありませんが、もっと多くの単語を同一視指定した場合には、検索速度はかなり遅くなります。

サンプル
  同一視指定用のファイルのサンプルが、秀まるおのホームページにて公開されています。参考にしてください。


 HmJre.dllにおける正規表現
  HmJre.dllでは、山田和夫氏作のJRE32.DLLをベースに少しだけ正規表現を拡張しています。

  拡張したのは以下の形式です。
パターンの繰り返し回数指定
{n}
{n,}
{n,m}

後方一致指定(V1.50にて一部拡張)
(?=expression)

後方不一致指定(V1.50にて一部拡張)
(?!expression)

前方一致指定
(?<=expression)

前方不一致指定
(?<!expression)

一般的正規表現互換のタグ付き正規表現(V1.50から)
\1 \2 ...

繰り返しマッチングでのものぐさ指定
*?
+?
??
{n,m}?

ヒットした扱いにするタグ指定（HmJre.dll独自形式）
(?\tag-number)

繰り返し指定その１（固定回数）
  特定の正規表現パターンをn回繰り返す場合には、{n}を使います。nの部分には数値が入ります。例えばabcを３回繰り返すには、(abc){3}と記述します。
  数字を５回繰り返すには、[0-9]{5}と書きます。

繰り返し指定その２（n回以上）
  特定の正規表現パターンがn回以上出てくることにマッチさせるには、{n,}を使います。nの部分には数値が入ります。例えばabcが３回以上繰り返すには、(abc){3,}と記述します。

繰り返し指定その３（n回以上、m回以下）
  特定の正規表現パターンがn回以上m回以下出てくることにマッチさせるには、{n,m}を使います。nおよびmの部分には数値が入ります。

後方一致指定
  特定の正規表現パターンの後に、さらに特定の正規表現パターンが続くことを指定しつつ、正規表現にヒットする文字列としては前方部分のみとするような指定が出来ます。
  例えば、「abcxyz」という文字列を検索しつつ、ヒットする文字としては「abc」だけにしたいようなケースに使います。普通の検索では必要ありませんが、強調表示や置換の時に使うと便利です。
  例えば「abc」の後に「xyz」が続きつつ、ヒットする文字列は「abc」だけにしたい場合は、
abc(?=xyz)
  と指定します。
  後方一致指定の後ろにさらにパターンを指定すると、両方のAND指定という意味になります。例えば、
abc(?=[a-z])([x-z])
  と指定すると、a-zでなおかつx-zにマッチする文字列にヒットします。このような表記とタグ付き正規表見を組み合わせるといろいろ応用範囲が広がります。

後方不一致指定
  後方一致指定とは反対に、後方部分が特定のパターンにヒットしないことを必要とします。例えば「abc」の後ろが「xyz」でない場合に「abc」のみにヒットさせたいようなケースで使います。
  上記例では、
abc(?!xyz)
  と指定します。
  後方不一致指定の後ろにさらにパターンを指定すると、両方のAND指定という意味になります。例えば、
([a-z])((?!\1)[a-z])\2
  というパターンを使うことにより、「１文字目と２文字目は一致しなけども２文字目と３文字が一致する３文字の英単語」を検索することが出来ます。

前方一致指定
  特定の正規表現パターンの前に、さらに特定の正規表現パターンが存在していることを指定しつつ、正規表現にヒットする文字列としては後方部分のみとするような指定が出来ます。
  例えば、「abcxyz」という文字列を検索しつつ、ヒットする文字としては「xyz」だけにしたいようなケースに使います。普通の検索では必要ありませんが、強調表示や置換の時に使うと便利です。
  例えば「abc」の後に「xyz」が続きつつ、ヒットする文字列は「xyz」だけにしたい場合は、
(?<=abc)xyz
  と指定します。
  前方一致指定は、正規表現文字列の先頭に書く必要があります。また、前方一致指定の表記自体をカッコで囲んだり「|」などと組み合わせることは出来ません。そういう指定をしてもエラーにはなりませんが、間違った検索を実行してしまいます。

検索系コマンドでの次候補／下候補系コマンド実行時の注意：
  例えば上記のような検索例で、「abcxyz」の先頭からではなく、例えば「b」の部分から検索を開始した場合、残念ながらHmJre.dllではxyz部分にうまくヒットしません。xyz部分にヒットさせるには、abcxyzの先頭から検索する必要があります。

前方不一致指定
  前方一致指定とは反対に、前方部分が特定のパターンにヒットしないことを必要とします。例えば「xyz」の前が「abc」でない場合に「xyz」のみにヒットさせたいようなケースで使います。
  上記例では、
(?<!abc)xyz
  と指定します。
  前方不一致指定は、正規表現文字列の先頭に書く必要があります。また、前方一致指定の表記自体をカッコで囲んだり「|」などと組み合わせることは出来ません。そういう指定をしてもエラーにはなりませんが、間違った検索を実行してしまいます。

検索系コマンドでの次候補／下候補系コマンド実行時の注意：
  前方一致指定と同じく、前方不一致の正規表現のマッチングも、検索開始位置として指定された位置から実行されます。それより前の部分については一致／不一致のチェックは行われません。
  例えば上の例で、「abcxyz」の「x」の部分から検索を開始してしまうとヒットしてしまいます。

ものぐさ（non-greedy）指定
  「*」、「+」、「?」、「{n,m}」のような繰り返し指定は、原則として、もっとも長い文字列にマッチさせるように動作します。例えば「a*」の指定が"a"の文字が連続している文字列にヒットするとき、"a"の全体にヒットします。
  ものぐさ指定をした場合は、逆に、もっとも短い文字列にヒットしようとします。例えば「a*?」だけ指定すると、それは０文字にヒットします。

  例えば、「<」で始まって「>」で終わる文字列にヒットさせるために、「<.*>」と正規表現指定すると、それはそれで正しくヒットしますが、それだと「<AAA>CCC<BBB>」のような文字列の全体にヒットしてしまって都合が悪いです。そういう時に、ものぐさ指定して、例えば「<.*?>」のように指定すると、<AAA>の部分と<BBB>の部分の２つに分けてヒットして、とても便利です。

  また、正規表現のマッチング処理自体も、ものぐさ指定した方が動作速度が速くなる可能性が高いです。

一般的正規表現互換のタグ付き正規表現
  秀丸に従来から備わっているタグ付き正規表現は、"\f"という記号で検索パターンを区切ります。Perl等でのタグ付き正規表現では、カッコを使ってターゲットを指定する形になっています。そのPerl等と同じ方式のタグ指定が、HmJre.dllでも出来ます。こっちの方式でタグ指定する場合は、その指定されたタグを検索パターンの中に入れることも出来ます。
  こちらのやり方としては、タグ指定したい部分をカッコで囲みます。例えば、英数字と数字の組み合わせを検索しつつ、そのヒットした部分の数字の部分だけをタグ指定したい場合は、その数字に相当する部分をカッコで囲みます。
[a-z]+([0-9]+)
  のように指定します。そして、タグとしては、\1というのが数字の部分に相当することになります。または、
([a-z]+)([0-9]+)
  のようなパターンを指定した場合は、英字の部分が\1になり、数字の部分が\2となります。

  タグの対象となるのはあくまで一番ネストの浅いカッコだけなので、例えば、
(aaa|(bbb|ccc))
  と指定した場合には、それ全体が\1に相当し、\2、\3に該当する物は存在しないことになります。

  「\1」等を検索文字列の中に入れることも出来ます。例えば、
\<([a-z])((?!\1)[a-z])\2\>
  と指定すると、"see"や"all"のような、１文字目と２文字目は一致しないけども２文字目と３文字目が一致する３文字の単語を検索することが出来ます。

補足：
  前方一致／不一致、後方一致／不一致指定についてはタグ付き正規表現でのカッコの対象外となります。例えば、"(aaa)(?!bbb)(ccc)"というパターンを指定した場合での"\2"に該当する部分は(ccc)部分となります。

ヒットした扱いにするタグ指定（HmJre.dll独自形式）
  (?\tag-number)の形式を使うことで、検索でヒットした扱いにする部分を、検索パターン中のタグの指定で行うことが出来ます。前方一致／前方不一致指定などを使ってもいいんですけど、それとは別にこういうのも対応しました。

  例えば、aaabbbcccという文字列を検索しつつも、ヒットした扱いにしたいのがbbbだとすると、
(?\2)(aaa)(bbb)(ccc)
  と指定すればいいです。(?\tag-number)の指定は正規表現パターンのどこに入れてもかまいません。複数指定した場合は一番最後に指定した方のみが有効となります。

その他
  他の正規表現パターンについては、秀丸エディタのヘルプなりJRE32.DLLの説明なりを参照ください。
  JRE32.DLLとの互換性を多少なりとも確保するために、{n}などの形式で間違いがあってもエラーにはなりません。例えば「a{」が指定された場合は、それは{n}などの指定ではなく、単に「a{」という文字列を検索する指定であると解釈されます。


 JRE32.DLL互換API
  山田和夫さん作のJRE32.DLLと互換性のある（と思われる）、以下のAPIをサポートしています。

Jre2Open
Jre2Compile
Jre2GetMatchInfo
Jre2Close
JreGetVersion
GetJreMessage
DecodeEscSeq
  上記APIについては、たぶんJRE32.DLLと互換性がありますが、JRE2構造体中のメンバーはうちのDLLでまったく別の目的に使っています。 なので、JRE32.DLLとHMJRE.DLLを混ぜて呼び出したりしないでください。例えばJRE32.DLLのJre2Open関数で呼び出し初期化したJRE2構造体をHMJRE.DLL側に渡したりしないでください。

  JreGetVersion関数の返す値は、HMJRE.DLL独自のバージョン番号となります。

JRE32.DLLについては、たぶん以下のURLを参照すればいいと思います。
http://www.yamada-labs.com/software/spec/jre/

HMJRE.DLL独自の拡張
  V1.12以下では、Jre2SetCodePageという関数だけが独自に追加されてましたが、V1.67ではさらに多くの独自拡張がなされています。それらを説明します。

extern "C" BOOL WINAPI Jre2SetCodePage( LPJRE2 pJre, UINT cp );
  検索文字列および検索対象文字列のコードページを指定します。コードページにはCP_UTF8は指定できません。

  文字コードの違う文字列について検索を実行する時は、Jre2Open関数を呼び出した次にこの関数を呼んでください。この関数を呼んだ後でないと、Jre2Compile

  返り値は現在の所、常にTRUEとなっています。

extern "C" BOOL FAR PASCAL Jre2GetMatchInfo_HmJre( LPJRE2 pJre, LPSTR pszTarget, int xEnd )
  Jre2GetMatchInfo_HmJre関数は、pszTargetで示される検索対象文字列の長さをパラメータで指定する以外は、Jre2GetMatchInfo関数と同じです。
  検索対象文字列の長さがあらかじめ分かっている場合には、こちらの関数を使った方が高速に動作します。例えば同一文字列に対して何回も検索を実行する場合にも、あらかじめstrlen関数で文字列の長さを計算しておいて、こちらの関数を呼んだ方が高速になります。


 あいまい検索API（リファレンス編）
  JreFuzzy.hをincludeするとして、その関数の説明だけします。
BOOL WINAPI Fuzzy_Open( JREFUZZYDATA* pData, BOOL fDummy = FALSE );
  JREFUZZYDATAを初期化します。fDummyにはFALSEを入れておいてください。
  JREFUZZYDATAのdwSizeメンバーには、構造体のサイズを入れてから呼び出してください。

  構造体のサイズが適当でない場合（大きい場合はいいけども、小さい場合）は初期化に失敗し、FALSEを返します。初期化に成功した場合はTRUEを返します。

Fuzzy_Open後のフラグの書き換え（重要）

  Fuzzy_Openすると、JREFUZZYDATA構造体中のメンバーが初期化されます。特に、flagsメンバーに、現在のあいまい検索オプションが設定されます。

  原則として、JREFUZZYDATA構造体中のメンバーを呼び出し元が直接書き換えてはいけませんが、flagsメンバーのFUZZYOPTION_NOCASEビットだけは例外です。 このフラグは、Fuzzy_ConvertFindStringおよびFuzzy_ConvertTargetを呼び出す前に限り、呼び出し元側でセット／リセットすることが出来ます。

BOOL WINAPI Fuzzy_Close( JREFUZZYDATA* pData );
  JREFUZZYDATA構造体を終了化します。具体的には、HMJRE.DLL側が動的に確保したメモリを解放します。これを呼ばないでおくと、いわゆるメモリリークが発生します。
  失敗したらFALSEを返す作りになってますが、たぶんTRUEしか返しません。なので、デバッグ目的でない限り、返り値は無視してかまいません。

BOOL WINAPI Fuzzy_ConvertFindString( JREFUZZYDATA* pData, const char* pszSrc, BOOL fRegular );
  検索文字列をあいまい検索用に変換します。
  pszSrcには検索文字列を指定してください。
  検索文字列が正規表現の式になっている場合は、fRegularに1を指定してください。
  検索文字列が正規表現の式になっていないけども、正規表現で検索したい場合は、fRegularに2を指定してください。
  検索文字列が正規表現の式になってなくて、検索自体も普通にやりたい場合は、fRegularに0を指定してください。ただし、こうするとあいまい検索の一部が無効になります。

  変換した結果は、JREFUZZYDATA構造体中のpszFindConvedメンバーに設定されます。文字列の長さ（末尾のNULL文字は含まず）はcchFindConvedに設定されます。

  変換した結果の文字列の長さが0になってしまった場合はFALSEを返します。例えば「空白を無視する」となっている場合に空白だけを検索しようとするとFALSEが返ります。

BOOL WINAPI Fuzzy_ConvertTarget( JREFUZZYDATA* pData, const char* pszSrc );
  検索対象の文字列をあいまい検索用に変換します。

  変換した結果は、JREFUZZYDATA構造体中のpszTargetConvedメンバーに設定されます。文字列の長さ（末尾のNULL文字は含まず）はcchTargetConvedに設定されます。

int WINAPI Fuzzy_FindPos2RealPos( JREFUZZYDATA* pData, int x );
  あいまい検索用に変換した文字列から検索を実行し、何かヒットしたとして、そのヒットした位置から変換前の文字列での位置を計算して返します。

int WINAPI Fuzzy_FindArea2RealArea( JREFUZZYDATA* pData, int x, int* pcchMatch );
  あいまい検索用に変換した文字列から検索を実行し、何かヒットしたとして、そのヒットした位置と長さから、変換前の文字列での位置と長さを計算して返します。

  xには位置、*pcchMatchには長さを指定して呼び出すと、返り値として変換前の位置、*pcchMatchには変換前の長さが入ります。

  例えば空白を無視する設定で検索した時、検索でヒットした文字列の前後の空白を除去した形で値を返します。

int WINAPI Fuzzy_RealPos2FindPos( JREFUZZYDATA* pData, int x );
  あいまい検索用に変換する前の文字列の特定の位置が、あいまい検索用に変換した文字列中のどの位置に相当するかを返します。

  変換した文字列の途中から検索を開始したい場合に必要な関数です。

JREFUZZYDATA* WINAPI Fuzzy_GetFuzzyDataInJre( JRE2* pJre );
  JRE2構造体中のwTranslateに1を設定してJre2Open関数を呼び出した時の、HMJRE.DLLが内部的に生成したJREFUZZYDATA構造体のアドレスを返します。
  wTranslateに1を設定してJre2Openを呼び出すよりは、wTranslateは常に0にして、JREFUZZYDATA構造体を別に用意して検索しないと、事実上正しい検索は出来ないと思います。なので、この関数はたぶん不要です。（でもなぜか用意してある）

BOOL _cdecl Fuzzy_OptionDialog( HWND hwndParent, UINT flagsDummy );
  あいまい検索の設定ダイアログボックスを呼び出します。

  flagsDummyは今のところ使ってません。0を指定してください。

  Fuzzy_Openした後でこの関数を呼び出しても、Fuzzy_Openした側のJREFUZZYDATAには設定内容は反映されません。このFuzzy_OptionDialog関数を呼び出した後に、その設定が有効であるかのように動作させるには、必ずFuzzy_Openしなおす必要があります。

int WINAPI JreGetTagPosition( LPJRE2 pJre, char chTagWantGet, int* pcchMatch );
  タグ付き正規表現で検索した時に、\1、\2等に相当する部分の桁位置および長さを返します。
  返り値は桁位置で、*pcchMatchにマッチした長さを返します。
  chTagWantGetには、'1'～'9'の文字を指定してください。
  chTagWantGetにマッチする部分が無い場合は-1を返します。

  この関数はVersion1.50から追加されています。


 あいまい検索API（実用編）
■その１：正規表現での検索が必要。
  あいまい検索を実行するには、正規表現での検索が必要です。

  正規表現がそもそもONの場合は、Fuzzy_ConvertFindTarget関数でのfRegularに1を設定して変換すればいいです。
  正規表現がＯＦＦの場合には、Fuzzy_ConvertFindTarget関数でのfRegularに2を設定して変換し、実際の検索にはJre2GetMatchInfo類を使ってください。

  どうしても正規表現を使いたくない場合は、fRegularを0にしてもいいですが、その場合、ユーザー設定の同一視指定ファイル中の、複数文字の同一視指定が実行できなくなります。

  正規表現を使う／使わないに限らず、実際の検索は、JREFUZZYDATA構造体中のpszFindConvedおよびpszTargetConvedを使って実行する必要があります。

■その２：Fuzzy_OpenしてからNOCASESENSEフラグを書き換える
  大文字／小文字の区別をするかしないかは、あいまい検索のオプションとしてではなく、呼び出し元が用意すべきオプションとなってます。
  Fuzzy_Openを呼び出してJREFUZZYDATAを初期化したら、その後すかさずflagsメンバーのFUZZYOPTION_NOCASESENSEフラグを適当に指定してください。

■その３：改行を無視する用
  「改行を無視する」の場合、呼び出し元が複数行の検索対象文字列をまとめてFuzzy_ConvertTargetに渡してやる必要があります。
  呼び出し元は、FUZZYOPTION_NORETURNフラグを見て、もしこそがセットされていたら、
((flags & FUZZYOPTION_NORETURN_MASK) >> FUZZYOPTION_NORETURN_SHIFT) + 1
  の式で得られる値の数だけ改行を含んだ文字列（＝上記の式で得られる値にさらに+1した数の行）をまとめてFuzzy_ConvertTargetしてやらないといけないです。
  改行文字は、「\n」つまり、0x0Aの制御文字に変換して渡してください。（\rや\r\nはダメです。JRE32.DLLもそうなってるはず。）


 JREFUZZY.H
■以下の内容をコピーして使ってください。

#ifndef JREFUZZY
#define JREFUZZY

// JreFuzzy.h
#define FUZZYOPTION_NOCASE          1           // 半角英数字の大文字／小文字を区別しない
//廃止 #define FUZZYOPTION_NOCASEZENKAKU   2           // 全角英数字の大文字／小文字を区別しない
#define FUZZYOPTION_NOHANZEN        4           // 半角／全角を区別しない
#define FUZZYOPTION_NOHIRAKATA      8           // ひらがなとカタカナを区別しない
#define FUZZYOPTION_NOBIGSMALLKANA  0x10        // 大きい「あ」と小さい「ぁ」を区別しない
#define FUZZYOPTION_NODAKUON        0x20        // 濁音、半濁音を区別しない。「は」、「ば」、「ぱ」を同一視する。
#define FUZZYOPTION_KANAHYPHEN      0x40        // かなの「ー」と英数の「－」を同一視する
#define FUZZYOPTION_NOSPACE         0x80        // 空白／タブ文字を無視する
#define FUZZYOPTION_NORETURN        0x100       // 改行を無視する

#define FUZZYOPTION_CUSTOM1         0x00010000
#define FUZZYOPTION_CUSTOM2         0x00020000
#define FUZZYOPTION_CUSTOM3         0x00040000
#define FUZZYOPTION_CUSTOM4         0x00080000

#define FUZZYOPTION_NORETURN_MASK   0x70000000  // 0～7 --> 1～8に対応。
#define FUZZYOPTION_NORETURN_SHIFT  28          // 28ビットシフトさせる。

#define FUZZYOPTION_ALL             0xFFFFFFFF

struct JREFUZZYDATA {
    DWORD   dwSize;
    DWORD   flags;
    char*   pszFindConved;
    int     cchFindConved;
    char*   pszTargetConved;
    int     cchTargetConved;
    short*  psTargetPos;
    WORD*   pwCustomConv;
    char*   pszTargetOrigin;    // 変換前のpszTarget、V0.04から。
    char*   pbSynonym;
    int     cbSynonym;
    int     cSynonymMultiplyMax;
    int     cchSynonymWordMax;
    DWORD   adwReserve[8];
};

extern "C" BOOL WINAPI Fuzzy_Open( JREFUZZYDATA* pData, BOOL fDummy = FALSE );
extern "C" BOOL WINAPI Fuzzy_Close( JREFUZZYDATA* pData );
extern "C" BOOL WINAPI Fuzzy_ConvertTarget( JREFUZZYDATA* pData, const char* pszSrc );
extern "C" BOOL WINAPI Fuzzy_ConvertFindString( JREFUZZYDATA* pData, const char* pszSrc, BOOL fRegular );
extern "C" int WINAPI Fuzzy_FindPos2RealPos( JREFUZZYDATA* pData, int x );
extern "C" int WINAPI Fuzzy_FindArea2RealArea( JREFUZZYDATA* pData, int x, int* pcchMatch );
extern "C" int WINAPI Fuzzy_RealPos2FindPos( JREFUZZYDATA* pData, int x );
extern "C" JREFUZZYDATA* WINAPI Fuzzy_GetFuzzyDataInJre( JRE2* pJre );
extern "C" BOOL _cdecl Fuzzy_OptionDialog( HWND hwndParent, UINT flagsDisable );

#define FUZZYERROR_FINDSTRING_NOTHING   100

#endif


 マクロからのdllfunc呼び出し
  HmJre.dllには、秀丸マクロからloaddllしてdllfuncで呼び出せる関数があります。
Fuzzy_OptionDialog関数
  この関数は、あいまい検索の設定ダイアログボックスを表示します。

パラメータ１（数値型）：
  ダイアログボックスの親となるウィンドウのハンドルを指定します。普通はhidemaruhandle(0)を指定してください。

返り値：
  OKボタンを押して設定を完了した場合は1、キャンセルボタンを押した場合は0を返します。

JreGetVersion関数
  この関数はHmJre.dllのバージョン番号を返します。dllfunc関数で呼び出し可能です。パラメータはありません。

返り値：
  返り値は、下位の２バイトのみが有効で、上位ワードにはでたらめな値が入ってしまいます。以下のようにしてバージョン番号を取得してください。

メジャーバージョン番号 = (dllfunc("JreGetVersion") & 0xFF00) / 256;
マイナーバージョン番号 = (dllfunc("JreGetVersion") & 0xF0) / 16 * 10 + (dllfunc("JreGetVersion") & 0xF);

FindRegular, FindRegularNoCaseSense関数（V1.50以降から）
  FindRegular関数は、特定の文字列から特定の正規表現パターンのマッチングをして、ヒットした場合はその位置を返します。
第１パラメータ（文字列型）： 検索したい正規表現文字列を指定します。
第２パラメータ（文字列型）： 検索対象の文字列を指定します。
第３パラメータ（数値型）： 検索を開始する桁位置を指定します。先頭から検索したい場合は0を指定します。
返り値（数値型）： ヒットした場合は桁位置（0以上の値）を返します。ヒットしなかった場合は-1を返します。正規表現の解釈その他でエラーが起きた場合は-2を返します。
  FindRegularNoCaseSense関数は、大文字／小文字を区別しないで検索する以外は、FindRegular関数とまったく同じです。
例
#n = dllfunc( "FindRegular", "pattern", "target-string", 0 );
if( #n >= 0 ) {
    message "ヒットしました。";
}
補足：
  FindRegularおよびFindRegularNoCase関数を連続して呼ぶ場合で、正規表現パターンが同一である場合、いわゆる「正規表現パターンのコンパイル」が省略され、結果として２回目以降の検索が高速動作します。逆に言うと、正規表現パターンが変わるとそのたびにコンパイルが働くので、遅くなります。

GetLastMatchLength関数（V1.50以降から）
  FindRegularまたはFindRegularNoCaseSense関数で0以上の値が返った場合に、マッチした文字列の長さを返します。返り値は数値型で、パラメータはありません。

EnvChanged関数（V1.71以降から）
  EnvChanged関数は、あいまい検索関係の設定をレジストリから読み込み直しします。マクロからあいまい検索の設定をいじりたい場合には、まずはHmJre.dll用のレジストリを適当に書き換えてからこの関数を呼んでください。
例
#n = dllfunc("EnvChanged");


 HMJRE.DLLの著作権、HMJRE.DLLの同封、配布について
著作権
  HMJRE.DLLの著作権は、有限会社サイトー企画にあります。
  （実際に作っているのは斉藤秀夫です）

  HMJRE.DLLはフリーソフトです。
  HMJRE.DLLの利用方法について特に制限はありません。商用目的であっても営利目的であってもかまいません。

  HMJRE.DLL関係の画面の掲載、雑誌への収録その他について、特にサイトー企画に許可を得る必要ははありません。

同封、配布について
  HMJRE.DLLは、サイトー企画以外の人が、その人の作ったソフトに添付して配布してもかまいません。ただし、その場合、以下の条件があります。

  • HMJRE.DLLの著作権が有限会社サイトー企画にあることを、添付元ソフトウェアのどこかわかりやすい所に記載しないといけません。出来ればソフトのパージョン情報ダイアログボックス中に、いっしょに「HMJRE.DLL (C) 有限会社サイトー企画」も入れていただくのがいいです。いっしょに入れるのがいやな場合はヘルプに記載するだけでもかまいません。
  • 添付しているHMJRE.DLLのバージョンが何かユーザーさんに分かるような仕組みを入れてください。
  • HMJRE.DLLのファイル名を変えてはいけません。
  • HMJRE.DLLのヘルプファイル（HMJRE.HLP）もHMJRE.DLLとセットでないといけません。
  • HMJRE.DLLがフリーソフトであることを明記する必要はありませんが、有料であるようなことを書いたり、その他ウソ偽りを書いてはいけません。

サポート、問い合わせ先
  HMJRE.DLLの使い方について疑問な点があれば、サイトー企画のサポート拠点に問い合わせください。ただし、あくまで無料ソフトについての無料サポートなので、あまり深入りした話にはお答えできません。