hmonig.dll Ver.0.7.9.0 Copyright(C) 2009-2017 h-tom

top秀丸エディタマクロマクロで使うDLL

目次

はじめに

hmonig.dllは、鬼雲を使用した、hmjre.dll 互換の正規表現検索DLLです。 渡された文字列 (Shift_JIS) を、DLL の内部で Unicode(UTF-16LE) に変換し、処理を行っています。 その為、hmjre.dllと比較し、メモリ消費量は多くなり、遅くなると思います。

圧縮ファイルの内容

COPYING_Onigmo_Oniguruma :鬼車・鬼雲ライセンス条文
hmonig.dll               :32bit DLL(Windows Vista以降用)
hmonig.html              :説明ファイル
x64                      :フォルダ
└hmonig.dll             :64bit DLL(Windows Vista以降用)
XP-32                    :フォルダ
└hmonig.dll             :Windowx XP 32bit用 DLL
XP-64                    :フォルダ
└hmonig.dll             :Windowx XP 64bit用 DLL

インストール・アンインストール

秀丸エディタで使用するには、メニューの「その他」→「動作環境」→「環境」→「正規表現」で、設定を行います。
秀丸メールで使用する場合には、メニューの「設定」→「秀丸エディタの動作環境」→「環境」→「正規表現」になります。

インストール

秀丸エディタ(秀丸メール)本体と同じ場所に、hmonig.dll を配置して、「DLLの変更」ボタンから、「hmonig.dll」を指定してください。

アンインストール

使用しない場合は「DLLの変更」ボタンから、デフォルトの「hmjre.dll」を指定してください。 hmonig.dll が不要なら削除して下さい。レジストリ等は使用していません。

機能の説明

hmonig.dll は、受け取った文字列を、Unicode(UTF-16LE) に変換し、処理しています。 Jre2SetCodePage で、UTF-8を指定した場合は、例外的にUTF-16LEへの変換は行わずに処理を行います。 (秀丸エディタ/秀丸メールでは、UTF-8 を指定される事はないです。)

内部処理がUnicodeになることによる、hmjre.dllとの違い。

正規表現について

オプション的な機能について

他の検索用エンジンとの違い

hmjre.dll との違い

BRegIf.dll + bregonig.dll との違い

その他・制限事項など

DLLの関数について

マクロ用関数について

マクロ用関数の説明は、この文書の最後にある関数リファレンスに記載しています。 マクロ用関数は、hmjre.dll 互換関数と、hmonig.dll 独自の関数があります。

互換関数

独自関数

独自関数(互換関数のワイド文字対応版)

互換関数では、Unicode 文字を扱うことはできません。 Unicode を扱う場合または、扱う可能性がある場合は、独自関数を使用してください。 (互換関数のワイド文字対応版を使用すること。)

文字変数内に、Unicode 文字が含まれるかどうかの、チェック方法がマクロヘルプに記載されているので、 変数内に、Unicode 文字が含まれているかどうか、チェックすることは可能です。 (秀丸エディタ Ver.8 charindex_to_byteindex)

jre32.dll / hmjre.dll 互換 API

jre32.dll 互換 API

jre32.dll と互換性のある、以下の API をサポートしています。

jre32.dll については、以下の URL を参照して下さい。

http://www.yamada-labs.com/software/spec/jre/

hmjre.dll 互換 API

hmjre.dll と互換性のある、以下の API をサポートしています。

hmjre.dll 互換API については、以下の URL を参照して下さい。

hmjre.dll 互換あいまい検索 API

hmjre.dll 互換というより、hmjre.dllをロードして、そのまま処理を丸投げしています。

あいまい検索に関しては、以下の URL を参照して下さい。

http://hidemaruo.dip.jp:81/hidesoft/hidesoft_2/x24816.html

hmonig.dll 独自 API

jre32.dll / hmjre.dll 互換 API / hmonig.dll 独自 APIの使い方

基本的には、以下の順でAPIを呼び出して下さい。

  1. Jre2Open
    検索開始(構造体初期化)

  2. Jre2SetCodePage
    検索に使用するコードページを設定 省略可能で、省略した場合には、デフォルトで以下のコードページを使用します。

       通常版API    :Shift_JIS(932)
       Unicode版API :UTF-16LE
  3. Jre2Compile
    正規表現のコンパイル

  4. Jre2GetMatchInfo/Jre2GetMatchInfo_HmJre
    検索の実行

  5. Jre2Close
    検索終了(各種メモリ解放)

Unicode版APIの場合、Jre2SetCodePageW で、コードページを指定しても、内部処理には使用しません。 UTF-16LE固定なので、Jre2SetCodePageW は省略可能です。

Jre2SetCodePage で各種コードページが指定可能ですが、確認したのは、

のみです。他のコードページに関しては、確認していません。

jre32.dll / hmjre.dll で初期化/使用した、Jre2構造体を、hmonig.dllで使用しないで下さい。 確実に誤動作します。

その他・免責事項、ライセンス等

連絡先

変更履歴

2009/07/12 Ver.0.1.0
2009/07/25 Ver.0.1.1
2009/11/23
2009/12/06 Ver.0.1.2
2009/12/25 Ver.0.1.3
2010/01/11 Ver.0.1.4
2010/01/13 Ver.0.1.4.1
2010/01/14 Ver.0.1.4.2
2010/01/28 Ver.0.2.0
2010/01/30
2010/01/31
2010/02/03
2010/02/06
2010/02/09
2010/02/10
2010/02/11
2010/02/12 Ver.0.5.0
2010/02/17 Ver.0.5.1
2010/02/18
2010/02/19
2010/02/25
2010/02/26
2010/02/27
2010/03/02
2010/03/03 Ver.0.5.1.1
2010/03/05 Ver.0.5.2.0
2010/03/06 Ver.0.5.3.0
2010/03/12 Ver.0.5.4.0
2010/03/14
2010/03/16 Ver.0.5.5.0
2010/03/24 Ver.0.5.5.1
2010/06/05 Ver.0.5.6.0
2010/07/07 Ver.0.5.6.1
2010/07/09
2010/07/15 Ver.0.5.7.0
2011/04/30 Ver.0.5.7.1
2011/05/28 Ver.0.5.8.0
2011/09/03 Ver.0.5.9.0(β1)
2011/09/09 Ver.0.5.9.1(β2)
2011/09/10 Ver.0.5.9.2(β3)
2011/09/18 Ver.0.5.9.3(β4)
2011/10/04 Ver.0.5.9.4(β5 未公開)
2011/10/18 Ver.0.5.9.5(β6)
2011/10/22
2011/10/25 Ver.0.5.9.6(β7 未公開)
2011/11/03 Ver.0.5.9.7(β8)
2011/11/05 Ver.0.5.9.8(正式版)
2011/11/08 Ver.0.6.0.0(β1)
2011/11/20
2011/12/10 Ver.0.6.0.1(β2)
2011/12/13 Ver.0.6.0.2(正式版)
2011/12/20 Ver.0.6.1.0(β1)
2011/12/31
2012/01/04
2012/01/06 Ver.0.6.1.1(β2)
2012/01/07
2012/01/09
2012/01/11
2012/01/21 Ver.0.6.1.2(正式版)
2012/02/05 Ver.0.6.2.0(正式版)
2012/03/31 Ver.0.6.3.0(正式版)
2012/05/30 Ver.0.6.4.0(正式版)
2012/06/03
2012/06/29 Ver.0.6.5.0(正式版)
2012/11/03 Ver.0.6.6.0(正式版)
2013/03/17 Ver.0.6.7.0(正式版)
2013/04/18 Ver.0.6.8.0(未公開)
2013/05/30 Ver.0.6.8.1(正式版)
2013/06/11 Ver.0.6.9.0(正式版)
2013/07/06 Ver.0.7.0.0(正式版)
2013/09/07 Ver.0.7.1.0(β1)
2013/09/16
2014/02/04
2014/04/12 Ver.0.7.1.1(β2)
2014/04/20
2014/07/01 Ver.0.7.1.2(正式版)
2014/07/27 Ver.0.7.2.0(正式版)
2014/09/13 Ver.0.7.3.0(正式版)
2015/01/31 Ver.0.7.4.0(β1)
2015/05/02 Ver.0.7.4.1(正式版/未公開)
2015/12/19 Ver.0.7.4.2(正式版)
2016/01/25 Ver.0.7.4.2a(正式版)
2016/03/05 Ver.0.7.5.0(β1)
2016/03/12 Ver.0.7.5.1(β2)
2016/07/01 Ver.0.7.5.2(正式版)
2016/10/21 Ver.0.7.6.0(β1)
2016/10/26
2016/11/01 Ver.0.7.6.1(β2)
2016/11/02
2016/12/10 Ver.0.7.6.2(正式版)
2017/01/17 Ver.0.7.7.0(正式版)
2017/01/29 Ver.0.7.8.0(正式版)
2017/05/16 Ver.0.7.9.0(正式版)

関数リファレンス

jre32.dll 互換API

Jre2Open

関数名
BOOL WINAPI Jre2Open(LPJRE2 lpjre);
機 能
JRE2構造体を初期化する
引 数
lpjre
JRE2構造体へのポインタ
戻り値

(BOOL)

  TRUE  成功
  FALSE 失敗

Jre2Compile

関数名
BOOL WINAPI Jre2Compile(LPJRE2 lpjre, LPSTR lpszRe);
機 能
検索パターンをコンパイルする
引 数
lpjre
JRE2構造体へのポインタ
lpszRe
検索パターン
戻り値

(BOOL)

 TRUE  コンパイル成功
 FALSE コンパイル失敗

Jre2GetMatchInfo

関数名
BOOL WINAPI Jre2GetMatchInfo(LPJRE2 lpjre, LPSTR lpszRe);
機 能
検索を行い、その結果をJRE2構造体へ格納する
引 数
lpjre
JRE2構造体へのポインタ
lpszStr
検索対象文字列
戻り値

(BOOL)

 TRUE  マッチ
 FALSE マッチしない

Jre2Close

関数名
BOOL WINAPI Jre2Close(LPJRE2 lpjre);
機 能
JRE2構造体の使用終了を宣言する
引 数
lpjre
JRE2構造体へのポインタ
戻り値

(BOOL)

  TRUE  成功
  FALSE 失敗

JreGetVersion

関数名
WORD WINAPI JreGetVersion(void)
機 能
DLLのバージョンを取得する
引 数
なし
戻り値

(WORD)

 DLLのバージョンを0x100倍した値

GetJreMessage

関数名
int WINAPI GetJreMessage(int nMessageType, int nLanguage, LPSTR lpszBuff, int cbBuff);
機 能
エラー番号からエラーメッセージの文字列を取得する。
引 数
nMessageType
エラー番号
nLanguage
メッセージの言語(未使用)
lpszBuff
メッセージを格納するバッファ
cbBuff
メッセージを格納するバッファサイズ
戻り値

(int) メッセージのバイト数

  0以上 コピーしたメッセージのバイト数
  -1    エラー

hmjre.dll 互換API

Jre2SetCodePage

関数名
BOOL WINAPI Jre2SetCodePage(LPJRE2 pJre, UINT cp);
機 能
HmOnigInfo構造体の初期化、検索文字列および検索対象文字列のコードページを指定します。
引 数
lpjre
JRE2構造体へのポインタ
cp

コードページ

437   :OEM United States
28591 :ISO 8859-1 Latin 1; Western European (ISO)
28592 :ISO 8859-2 Central European; Central European (ISO)
28593 :ISO 8859-3 Latin 3
28594 :ISO 8859-4 Baltic
28595 :ISO 8859-5 Cyrillic
28596 :ISO 8859-6 Arabic
28597 :ISO 8859-7 Greek
28598 :ISO 8859-8 Hebrew; Hebrew (ISO-Visual)
28599 :ISO 8859-9 Turkish
28603 :ISO 8859-13 Estonian
28605 :ISO 8859-15 Latin 9
65001 :Unicode (UTF-8) 
1201  :Unicode UTF-16, big-endian byte order
1200  :Unicode UTF-16, little-endian byte order
12001 :Unicode UTF-32, big-endian byte order
12000 :Unicode UTF-32, little-endian byte order
51932 :EUC_JP
20000 :EUC_TW;
51949 :EUC Korean
51936 :EUC_CN;
932   :Shift_JIS
20866 :KOI8-R
1251  :ANSI Cyrillic
950   :BIG5
54936 :GB18030
戻り値

(BOOL)

  TRUE  成功
  FALSE 失敗

Jre2GetMatchInfo_HmJre

関数名
BOOL WINAPI Jre2GetMatchInfo(LPJRE2 pJre, LPSTR pszTarget, int xEnd);
機 能
検索を行い、その結果をJRE2構造体へ格納する
引 数
pJre
JRE2構造体へのポインタ
pszTarget
検索対象文字列
xEnd
検索対象文字列の長さ
戻り値

(BOOL)

 TRUE  マッチ
 FALSE マッチしない

JreGetTagPosition

関数名
int WINAPI JreGetTagPosition( LPJRE2 pJre, char chTagWantGet, int* pcchMatch );
機 能
タグ付き正規表現で検索した時に、、等に相当する部分の桁位置および長さを返す。
引 数
pJre
JRE2構造体へのポインタ
chTagWantGet
'1'~'9'の文字を指定。
pcchMatch
マッチしたタグ部分の位置を格納するポインタ
戻り値

(int)

  0以上  マッチしたタグ部分の長さ
  -1     マッチしていない

hmonig.dll 独自API

JreNameToTags

関数名
int WINAPI JreNameToTags(LPJRE2 lpjreJre, LPSTR CaptureName, int** NumList)
機 能
指定された名前に対する捕獲式集合のグループ番号リストを返す。
引 数
lpjreJre
Jre2構造体へのポインタ
CaptureName
捕獲式集合の名前
NumList
番号リスト
戻り値

(int) 指定された名前に対するグループ数

 0以上  グループ数
 -1     名前に対する捕獲式集合がない場合

正規表現:(?<x>hmonig)(?<y>\\.dll) (?<x>hmonig)(?<y>\\.dll)

 n = JreNameToTags(lpjreJre, "x", NumList)
 n          -> 2 (名前に対する捕獲式集合の数)
 NumList[0] -> 1 (グループ番号その1)
 NumList[1] -> 3 (グループ番号その2)

 n = JreNameToTags(lpjreJre, "z", NumList)
 n          -> -1 (名前に対する捕獲式集合の数)

JreNameToTagsW

関数名
int WINAPI JreNameToTagsW(LPJRE2 lpjreJre, LPWSTR CaptureName, int** NumList)
機 能

JreNameToTagsのワイド文字対応版

CaptureName がワイド文字であること以外は、JreNameToTags と同じ。

JreGetCaptureList

関数名
int WINAPI JreGetCaptureList(LPJRE2 lpjreJre, NameCaptureInfo** CaptureInfo)
機 能
全ての名前付き捕獲式集合の情報を取り出す。
引 数
lpjreJre
Jre2構造体へのポインタ
CaptureInfo
捕獲式集合用構造体のリスト
戻り値

(int) 名前付き捕獲式集合の数

異常終了の場合は、-1を返す。 例

正規表現:(?<x>hmonig)(?<y>\\.dll) (?<x>hmonig)(?<y>\\.dll)

 n = JreGetCaptureList(lpjreJre, "x", CaptureInfo)
 n              -> 2 (名前に対する捕獲式集合の数)
 CaptureInfo[0] -> 名前付き捕獲式集合その1 の情報
 CaptureInfo[1] -> 名前付き捕獲式集合その2 の情報

捕獲式集合用構造体

 typedef struct tagNameCapture {
     UINT    CodeFlg;    //UTF16LEの場合は1
     char *  Name;       //開始アドレス
     char *  NameEnd;    //終了アドレス
     int     CaptureCnt; //参照数
     int *   List;       //タグ番号リスト
 } NameCaptureInfo;
  • NameCaptureInfo.CaptureCnt は JreNameToTags の戻り値と同じ。
  • NameCaptureInfo.List は JreNameToTags の NumList と同じ。
  • NameCaptureInfo.CodeFlg は、Name が、UTF-16LEの場合に 1となる。
  • hmonig.dll は UTF-8 使用時以外は、内部処理を UTF-16LE で行っているため、通常は 1 となる。

JreGetTagCnt

関数名
int WINAPI JreGetTagCnt(LPJRE2 lpjreJre)
機 能
捕獲式集合の数を返す。
引 数
lpjreJre
Jre2構造体へのポインタ
戻り値

(int) 捕獲式集合の数

 -1 異常終了

hmjre.dll互換マクロ用関数

注意事項

FindRegular

関数名
FindRegular
機 能
正規表現を使った検索
書 式
#num = dllfunc("FindRegular", $RegexpStr, $TargetStr, #StartPos)
引 数
$RegexpStr
(文字) 正規表現
$TargetStr
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
戻り値

(数字) マッチした位置($TargetStrの先頭からのバイト数)

 -1     マッチしない
 -2     正規表現のエラー等
その他
"パターンの否定"は使えません。

FindRegularNoCaseSense

関数名
FindRegularNoCaseSense
機 能
正規表現を使った検索(大文字小文字を無視する)
書 式
#num = dllfunc("FindRegularNoCaseSense", $RegexpStr, $TargetStr, #StartPos)
引 数
$RegexpStr
(文字) 正規表現
$TargetStr
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
戻り値

(数字) マッチした位置($TargetStrの先頭からのバイト数)

 -1     マッチしない
 -2     正規表現のエラー等
その他
"パターンの否定"は使えません。

ReplaceRegular

関数名
ReplaceRegular
機 能
正規表現を使った置換
書 式
$str = dllfuncstr("ReplaceRegular", $RegexpStr, $TargetStr, #StartPos, $ReplaceStr, #Mode)
引 数
$RegexpStr
(文字) 正規表現
$TargetStr
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
$ReplaceStr
(文字) 置換文字列
#Mode
(数字) 全置換の場合は1、最初にヒットした箇所のみなら0。
戻り値
(文字) 置換後の文字列
マッチしなかった場合や、正規表現のエラーの場合は、""を返す。
その他
  • 置換文字列には"\1"等の、タグ参照を指定できます。
  • \nの形式は、nは1~9 までです。
  • \k<n>、\k'n'、\g{n}の形式は、nは10以上も指定可能です。
  • 置換文字列に使用できるタグ参照は、100個までです。それ以上は無視します。
  • 現状(Ver.0.6.1.0)では、置換文字列に名前参照を使用することは出来ません。

ReplaceRegularNoCaseSense

関数名
ReplaceRegularNoCaseSense
機 能
正規表現を使った置換(大文字小文字を無視する)
書 式
$str = dllfuncstr("ReplaceRegularNoCaseSense", $RegexpStr, $TargetStr, #StartPos, $ReplaceStr, #Mode)
引 数
$RegexpStr
(文字) 正規表現
$TargetStr
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
$ReplaceStr
(文字) 置換文字列
#Mode
(数字) 全置換の場合は1、最初にヒットした箇所のみなら0。
戻り値
(文字) 置換後の文字列。
マッチしなかった場合や、正規表現のエラーの場合は、""を返す。
その他
  • 置換文字列には"\1"等の、タグ参照を指定できます。
  • \nの形式は、nは1~9 までです。
  • \k<n>、\k'n'、\g{n}の形式は、nは10以上も指定可能です。
  • 置換文字列に使用できるタグ参照は、100個までです。それ以上は無視します。
  • 現状(Ver.0.6.1.0)では、置換文字列に名前参照を使用することは出来ません。

GetLastMatchLength

関数名
GetLastMatchLength
機 能
直前の検索でマッチした文字列の長さを返す
書 式
#num = dllfunc("GetLastMatchLength")
引 数
なし
戻り値

(数字) マッチした文字列の長さ。
直前に実行した関数により、バイト数または、文字数を返します。

 -1  マッチしていない
 -2  その他のエラー
その他
ワイド文字対応関数の場合は文字数を、その他の場合は、バイト数を返す。

GetLastMatchTagLength

関数名
GetLastMatchTagLength(#tagNum)
機 能
直前の検索で指定されたタグにマッチした文字列の長さを返す
引 数
#tagNum
(数字) タグの番号
戻り値

(数字) タグにマッチした文字列の長さ
直前に実行した関数により、バイト数または、文字数を返します。

 -1  マッチしていない
 -2  その他のエラー
その他
ワイド文字対応関数の場合は文字数を、その他の場合は、バイト数を返す。

GetLastMatchTagPosition

関数名
GetLastMatchTagPosition(#tagNum)
機 能
直前の検索で指定されたタグにマッチした文字列の先頭位置を返す
書 式
#num = dllfunc("GetLastMatchTagPosition", #tagNum)
引 数
#tagNum
(数字) タグの番号
戻り値

(数字)タグにマッチした文字列の先頭位置
直前に実行した関数により、バイト数または、文字数を返します。

 -1  マッチしていない
 -2  その他のエラー
その他
ワイド文字対応関数の場合は文字数を、その他の場合は、バイト数を返す。

JreGetVersion

関数名
JreGetVersion
機 能
バージョン番号を返す。
書 式
#num = dllfunc("JreGetVersion")
引 数
なし
戻り値
(数字) バージョン番号

hmonig.dll独自のマクロ用関数

GetErrorMessage

関数名
GetErrorMessage
機 能
エラーメッセージを返す。
書 式
$str = dllfuncstr("GetErrorMessage")
引 数
なし
戻り値
(文字) エラーメッセージ

GetDllVersionStr

関数名
GetDllVersionStr
機 能
バージョン番号と読み込んでいる鬼雲のバージョンを返す。
書 式
$str = dllfuncstr("GetDllVersionStr")
引数
なし
戻り値
(文字) バージョン情報文字列

GetLastMatchNameToTagCnt

関数名
GetLastMatchNameToTagCnt
機 能
指定された名前に対する捕獲式集合のグループ数を返す。
書 式
#num = dllfunc("GetLastMatchNameToTagCnt", $CaptureName)
引 数
$CaptureName
(文字) 捕獲式集合の名前
戻り値
(数字) グループ数
指定された名前がない場合や、検索を実行していない場合などは、-1を返す。
その他

通常関数(FindRegular/FindRegularNoCaseSense)使用時に、名前参照を使った場合のみ、有効です。 Unicode関数(FindRegularW/FindRegularNoCaseSenseW) 使用時に、この関数を使用しても、 失敗するので注意してください。

使い方

  1. GetLastMatchNameToTagCnt/GetLastMatchNameToTagCntW 関数で 名前参照のグループ数を取得
  2. GetLastMatchNameToTags 関数で、捕獲グループ(タグの番号)を取得
  3. GetLastMatchTagPosition/GetLastMatchTagLength で位置と長さを取得

 $target_1 = "hmonig.dll hmonig.dll";
 #n = dllfunc("FindRegular","(?<x1>hmonig)(?<y1>\\.dll) (?<x1>hmonig)(?<z1>\\.dll)", $target_1, 0);
 if(#n > -1){
     #n1 = dllfunc("GetLastMatchNameToTagCnt", "x1");
     message "x1:" + str(#n1);
     #cnt = 0;
     while(#cnt < #n1){
         #t = dllfunc("GetLastMatchNameToTags" ,#cnt);
         #p = dllfunc("GetLastMatchTagPosition", #t);
         #l = dllfunc("GetLastMatchTagLength", #t);
         message "No." + str(#cnt) + ":" + str(#t) + "\n" +
                 "見つかった場所:" + str(#p) + "\n" +
                 "見つかった長さ:" + str(#l) + "\n" +
                 "見つかった文字:" + midstr($target_1, #p, #l);
        #cnt = #cnt + 1;
    }
 }

GetLastMatchNameToTags

関数名
GetLastMatchNameToTags
機 能
GetLastMatchNameToTagCnt/GetLastMatchNameToTagCntW の実行結果を取り出す。
書 式
#num = dllfunc("GetLastMatchNameToTags", #group)
引 数
#group
(数字) 名前に対する捕獲式集合のグループ番号
戻り値
(数字) 名前に対するタグの番号
検索を実行していない場合や、GetLastMatchNameToTagCnt(W)を実行していない場合には、-1を返す。

GetLastMatchNameCnt

関数名
GetLastMatchNameCnt
機 能
FindRegular系関数実行時に、名前付き捕獲式集合を使用していた場合、名前の数を返す。
書 式
#num = dllfunc("GetLastMatchNameCnt")
引 数
なし
戻り値
(数字) 名前付き捕獲式集合の数を返す。
異常または、FindRegular系関数を実行していない場合は、-1を返す。
その他

GetLastMatchNameCnt/GetLastMatchNameCode/GetLastMatchName の使い方

 $target_1 = "hmonig.dll hmonig.dll";
 #n = dllfunc("FindRegular","(?<x1>hmonig)(?<y1>\\.dll) (?<x1>hmonig)(?<z1>\\.dll)", $target_1, 0);
 if(#n > -1){
     #n1 = dllfunc("GetLastMatchNameCnt");
     #n2 = dllfunc("GetLastMatchNameCode");
     #cnt = 0;
     $out = "";
     while(#cnt < #n1){
        if(#n2 == 0){
            $name = dllfuncstr("GetLastMatchName" ,#cnt);
        }else{
            $name = dllfuncstrw("GetLastMatchNameW" ,#cnt);
        }
        $out = $out + "$name[" + str(#cnt) + "] = " + $name + "\n";
        #cnt = #cnt + 1;
    }
    message $out;
 }

GetLastMatchNameCode

関数名
GetLastMatchNameCode
機 能
GetLastMatchNameCnt 実行後、得られる名前の文字種類を返す。
書 式
#num = dllfunc("GetLastMatchNameCode")
引 数
なし
戻り値

(数字) 名前の文字種類が、UTF-16LEの場合は、1を、それ以外は、0を返す。
異常または、GetLastMatchNameCntを実行していない場合は、-1を返す。

  • 0の場合は、dllfuncstr("GetLastMatchName", #index)
  • 1の場合は、dllfuncstrw("GetLastMatchNameW", #index)

を使用し、名前を取得すること。

GetLastMatchName

関数名
GetLastMatchName
機 能
名前付き捕獲式集合で使用された名前を返す。
書 式
$str = dllfuncstr("GetLastMatchName", #index)
引 数
#index
(数字) インデックス
戻り値
(文字) インデックスに対応する名前

hmonig.dll独自のマクロ用関数(ワイド文字対応)

dllfuncw/dllfuncstrw を使用して呼び出して下さい。

FindRegularW

関数名
FindRegularW
機 能
正規表現を使った検索
書 式
#num = dllfuncw("FindRegularW", $RegexpStrW, $TargetStrW, #StartPos)
引 数
$RegexpStrW
(文字) 正規表現
$TargetStrW
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
戻り値

(数字) マッチした位置($TargetStrの先頭からの文字数)

 -1  マッチしない
 -2  正規表現のエラー等
その他
"パターンの否定"は使えません。

FindRegularNoCaseSenseW

関数名
FindRegularNoCaseSenseW
機 能
正規表現を使った検索(大文字小文字を無視する)
書 式
#num = dllfuncw("FindRegularNoCaseSenseW", $RegexpStrW, $TargetStrW, #StartPos)
引 数
$RegexpStrW
(文字) 正規表現
$TargetStrW
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
戻り値

(数字) マッチした位置($TargetStrの先頭からの文字数)

 -1     マッチしない
 -2     正規表現のエラー等
その他
"パターンの否定"は使えません。

ReplaceRegularW

関数名
ReplaceRegularW
機 能
正規表現を使った置換
書 式
$str = dllfuncstrw("ReplaceRegularW", $RegexpStrW, $TargetStrW, #StartPos, $ReplaceStrW, #Mode)
引 数
$RegexpStrW
(文字) 正規表現
$TargetStrW
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
$ReplaceStrW
(文字) 置換文字列
#Mode
(数字) 全置換の場合は1、最初にヒットした箇所のみなら0。
戻り値
(文字) 置換後の文字列
マッチしなかった場合や、正規表現のエラーの場合は、""を返す。
その他
  • 置換文字列には"\1"等の、タグ参照を指定できます。
  • \nの形式は、nは1~9 までです。
  • \k<n>、\k'n'、\g{n}の形式は、nは10以上も指定可能です。
  • 置換文字列に使用できるタグ参照は、100個までです。それ以上は無視します。
  • 現状(Ver.0.6.1.0)では、置換文字列に名前参照を使用することは出来ません。

ReplaceRegularNoCaseSenseW

関数名
ReplaceRegularNoCaseSenseW
機 能
正規表現を使った置換(大文字小文字を無視する)
書 式
$str = dllfuncstrw("ReplaceRegularNoCaseSenseW", $RegexpStrW, $TargetStrW, #StartPos, $ReplaceStrW, #Mode)
引 数
$RegexpStrW
(文字) 正規表現
$TargetStrW
(文字) 対象文字列
#StartPos
(数字) 検索開始位置
$ReplaceStrW
(文字) 置換文字列
#Mode
(数字) 全置換の場合は1、最初にヒットした箇所のみなら0。
戻り値
(文字) 置換後の文字列。
マッチしなかった場合や、正規表現のエラーの場合は、""を返す。
その他
  • 置換文字列には"\1"等の、タグ参照を指定できます。
  • \nの形式は、nは1~9 までです。
  • \k<n>、\k'n'、\g{n}の形式は、nは10以上も指定可能です。
  • 置換文字列に使用できるタグ参照は、100個までです。それ以上は無視します。
  • 現状(Ver.0.6.1.0)では、置換文字列に名前参照を使用することは出来ません。

GetLastMatchNameToTagCntW

関数名
GetLastMatchNameToTagCntW
機 能
指定された名前に対する捕獲式集合のグループ数を返す。
書 式
#num = dllfuncw("GetLastMatchNameToTagCntW", $CaptureName)
引 数
$CaptureName
(文字) 捕獲式集合の名前
戻り値
(数字) グループ数
指定された名前がない場合や、検索を実行していない場合などは、-1を返す。
その他

Unicode対応の関数(FindRegularW/FindRegularNoCaseSenseW)使用時に、名前参照を使った場合のみ、有効です。 通常関数(FindRegular/FindRegularNoCaseSense)使用時にこの関数を使用しても、失敗します。

使い方

  1. GetLastMatchNameToTagCnt/GetLastMatchNameToTagCntW 関数で 名前参照のグループ数を取得
  2. GetLastMatchNameToTags 関数で、捕獲グループ(タグの番号)を取得
  3. GetLastMatchTagPosition/GetLastMatchTagLength で位置と長さを取得
$target_1 = "hmonig.dll hmonig.dll";
#n = dllfunc("FindRegular","(?<x1>hmonig)(?<y1>\\.dll) (?<x1>hmonig)(?<z1>\\.dll)", $target_1, 0);
if(#n > -1){
    #n1 = dllfunc("GetLastMatchNameToTagCnt", "x1");
    message "x1:" + str(#n1);
    #cnt = 0;
    while(#cnt < #n1){
        #t = dllfunc("GetLastMatchNameToTags" ,#cnt);
        #p = dllfunc("GetLastMatchTagPosition", #t);
        #l = dllfunc("GetLastMatchTagLength", #t);
        message "No." + str(#cnt) + ":" + str(#t) + "\n" +
                "見つかった場所:" + str(#p) + "\n" +
                "見つかった長さ:" + str(#l) + "\n" +
                "見つかった文字:" + midstr($target_1, #p, #l);
       #cnt = #cnt + 1;
   }
}

GetLastMatchNameW

関数名
GetLastMatchNameW(#num)
機 能
名前付き捕獲式集合で使用された名前を返す。
書 式
$str = dllfuncstrw("GetLastMatchNameW", #index)
引 数
#index
(数字) インデックス
戻り値
(文字) インデックスに対応する名前

wcslen2

関数名
wcslen2
機 能
Unicode(UTF-16LE)文字列の長さを返す。(サロゲートペアも1文字とカウント)
書 式
#num = dllfuncw("wcslen2", $TargetStr)
引 数
$TargetStr
(文字) 対象文字列
戻り値
(数字) 文字列の長さ

CheckSurrogatePair

関数名
CheckSurrogatePair
機 能
Unicode(UTF-16LE)文字列にサロゲートペアが含まれているか調べる
書 式
#num dllfuncw("CheckSurrogatePair", $TargetStr)
引 数
$TargetStr
(文字) 対象文字列
戻り値

(数字) 文字列中に含まれるサロゲートペアの数

 0      サロゲートペアなし
 1以上  サロゲートペアの数

wcsleftstr2

関数名
wcsleftstr2
機 能
Unicode(UTF-16LE)文字列の左側から指定された文字数の文字を返す。 (サロゲートペアも1文字とカウント)
書 式
$str = dllfuncw("wcsleftstr2", $TargetStr, #len)
引 数
$TargetStr
(文字) 対象文字列
#len
(数字) 文字数
戻り値
(文字) 指定された文字数の文字列
TargetStrの長さが、lenよりも小さい場合は、TargetStrをそのまま返す。

wcsrightstr2

関数名
wcsrightstr2
機 能
Unicode(UTF-16LE)文字列の右側から指定された文字数の文字を返す。 (サロゲートペアも1文字とカウント)
書 式
$str = dllfuncstrw("wcsrightstr2", $TargetStr, #len)
引 数
$TargetStr
(文字) 対象文字列
#len
(数字) 文字数
戻り値
(文字) 指定された文字数の文字列。
TargetStrの長さが、lenよりも小さい場合は、TargetStrをそのまま返す。

wcsmidstr2

関数名
wcsmidstr2
機 能
Unicode(UTF-16LE)文字列の左側から指定された位置から、指定された文字数の文字列を返す。 (サロゲートペアも1文字とカウント)
書 式
$str = dllfuncstrw("wcsmidstr2", $TargetStr, #pos, #len)
引 数
$TargetStr
(文字) 対象文字列
#pos
(数字) 位置("0(zero)"スタート)
#len
(数字) 文字数
戻り値

(文字) 指定された長さの文字列

  • #posが、対象文字列より大きい場合は、""を返します。
  • #lenが、対象文字列より大きい場合は、#pos以降の全ての文字列を返します。

wcsstrstr2

関数名
wcsstrstr2
機 能
Unicode(UTF-16LE)文字列から、指定された文字列を最初に見つけた位置を返す。 (サロゲートペアも1文字とカウント)
書 式
#num = dllfuncw("wcsstrstr2", $TargetStr, $SearchStr, #pos)
引 数
$TargetStr
(文字) 対象文字列
$SearchStr
(文字) 検索文字列
#pos
(数字) 検索開始位置("0(zero)"スタート)
戻り値

(数字) 検査文字列をみつけた位置(文字数)("0(zero)"スタート)

  • 見つからない場合は、-1
  • 引数が不正の場合は、-2

を返します。

wcsstrrstr2

関数名
wcsstrrstr2
機 能
Unicode(UTF-16LE)文字列から、指定された文字列を最後に見つけた位置を返す。 (サロゲートペアも1文字とカウント)
書 式
#num = dllfuncw("wcsstrrstr2", $TargetStr, $SearchStr, #pos)
引 数
$TargetStr
(文字) 対象文字列
$SearchStr
(文字) 検索文字列
#pos
(数字) 検索開始位置("0(zero)"スタート)
戻り値

(数字) 検査文字列をみつけた位置(文字数)("0(zero)"スタート)

  • 見つからない場合は、-1
  • 引数が不正の場合は、-2

を返します。

GetNormalizeString

関数名
GetNormalizeString
機 能
Unicode(UTF-16LE)を、正規化して返す
書 式
$str = dllfuncstrw("GetNormalizeString", #NOFRM, $TargetStr)
引 数
#NOFRM

(数字) 正規化形式の指定

 0x1:正規化形式 D  (NFD)  :正規分解
 0x2:正規化形式 C  (NFC)  :正規分解のあと正規合成を適用したもの
 0x5:正規化形式 KD (NFKD) :互換分解
 0x6:正規化形式 KC (NFKC) :互換分解のあと正規合成を適用したもの
$TargetStr
(文字) 対象文字列
戻り値

(文字) 指定した正規化形式に変換した文字列

  • 引数が不正の場合は、""を返します。
  • Windows XP用DLLの場合は、""を返します。

IsNormalized

関数名
IsNormalized
機 能
Unicode(UTF-16LE)文字列の、正規化形式をチェックする
書 式
#num = dllfuncw("IsNormalized", #NOFRM, $TargetStr)
引 数
#NOFRM

(数字) チェックする正規化形式の指定

 0x1:正規化形式 D  (NFD)  :正規分解
 0x2:正規化形式 C  (NFC)  :正規分解のあと正規合成を適用したもの
 0x5:正規化形式 KD (NFKD) :互換分解
 0x6:正規化形式 KC (NFKC) :互換分解のあと正規合成を適用したもの
$TargetStr
(文字) 対象文字列
戻り値

(数値) 指定した正規化形式の場合は 1、そうでない場合は 0

  • 引数が不正の場合は、0を返します。
  • Windows XP用DLLの場合は、0を返します。

SplitRegular

関数名
SplitRegular
機 能
指定された正規表現パターンで、文字列を分割する。
書 式
#num = dllfuncw("SplitRegular", $Regexp, $TargetStr, $SetVariable, $RegexpOption)
引 数
$Regexp
(文字) 分割する正規表現パターン
$TargetStr
(文字) 対象文字列
$SetVariable

(文字) 結果を格納する文字列配列名

結果を代入する秀丸マクロの文字列配列変数名

  • "$"はなくてもかまいません。省略した場合は先頭に"$"を追加しグローバル変数としてセットします。 "$"、"$$"がある場合はそのままセットします。
  • アルファベット(A~Z、a~z)と"_"アンダーバー以外は指定できません。 (先頭にある"$"、"$$"は問題ないです。)

    split   --> $split  グローバル変数へ
    $split  --> $split  (グローバル変数)
    $$split --> $$split (ローカル変数)
    split#  --> NG(英数字以外)
    変数    --> NG(英数字以外)
$RegexpOption

(文字) 正規表現に対するオプション

i:大文字小文字を無視する
m:"."を改行にマッチさせる
戻り値

(数値) 分割数

  • 引数が不正の場合は、0を返します。
  • 分割する正規表現パターンにマッチしない場合は、対象文字列をそのまま、要素数1の配列で返します。
  • 分割文字列は、指定した変数名の配列にセットします。
その他

使い方

loaddll "hmonig.dll";
$target_1 = "秀丸\tエディタ";
#n = dllfuncw("SplitRegular", "\\t", $target_1, "split", "");
if(#n > 0){
    $out = "";
    while(#n > #cnt){
        $out = $out + $split[#cnt] + "\n";
        #cnt = #cnt + 1;
    }
    message $out;
}

文字列配列名に "split" を指定しているので、$split配列で分割結果を取得可能。

hmonig.dll LICENSE

hmonig.dll のライセンスは、修正 BSD ライセンスとします。 バイナリ配布のみで、ソースの公開は行っていません。 (秀丸エディタ内部で使用している、独自コード(Unicode)の情報を含むため、ソースは公開できません。)

/*-
 * Copyright (c) 2009-2016  h-tom  <QYT00713@nifty.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */