が必要になります。詳しくはユニコード文字を扱う時の注意およびエンコードの種類が外国語の場合の注意を参照ください。#dummy = dllfunc("SetUnicodeIndexAutoConvert", 1); #dummy = dllfunc("NotifyEncode", encode);
FindRegularNoCaseSense関数は、大文字/小文字を区別しないで検索する以外は、FindRegular関数とまったく同じです。
第1パラメータ(文字列型): 検索したい正規表現文字列を指定します。 第2パラメータ(文字列型): 検索対象の文字列を指定します。 第3パラメータ(数値型): 検索を開始する桁位置を指定します。先頭から検索したい場合は0を指定します。 返り値(数値型): ヒットした場合は検索対象文字列先頭からの桁位置(0以上の値)を返します。ヒットしなかった場合は-1を返します。正規表現の解釈その他でエラーが起きた場合は-2を返します。
例
#n = dllfunc( "FindRegular", "pattern", "target-string", 0 ); if( #n >= 0 ) { message "ヒットしました。"; }
第1パラメータ(数値型): 大文字/小文字の区別を指定します。1なら区別あり、0なら無しです。 第2パラメータ(数値型): 正規表現のON/OFFを指定します。1なら正規表現あり、0なら普通の文字列検索です。 第3パラメータ(数値型): あいまい検索のON/OFFを指定します。1ならあいまい検索、0なら無しです。 第4パラメータ(文字列型): 検索したい文字列を指定します。 第5パラメータ(文字列型): 検索対象の文字列を指定します。 第6パラメータ(数値型): 検索を開始する桁位置を指定します。先頭から検索したい場合は0を指定します。 返り値(数値型): ヒットした場合は検索対象文字列先頭からの桁位置(0以上の値)を返します。ヒットしなかった場合は-1を返します。正規表現の解釈その他でエラーが起きた場合は-2を返します。
例
#n = dllfunc( "FindGeneral", 0,0,1, "b", "abc", 0 ); if( #n >= 0 ) { message "ヒットしました。"; }
補足:
FindRegularなどの関数呼び出しの後でReplaceRegularなどの置換系の関数を呼び出すと、それによってこの関数の返す値が壊れます。
FindRegularなどの関数呼び出しで負の数が返った場合(ヒットしなかった場合)には、GetLastMatchLength関数の返り値は-1になります。
補足:
FindRegularなどの関数呼び出しの後でReplaceRegularなどの置換系の関数を呼び出すと、それによってGetLastMatchTagPositionなどの関数の返す値が壊れ、返り値は不定となります。
FindRegularなどの関数呼び出しで負の数が返った場合(ヒットしなかった場合)にも、GetLastMatchTagPositionなどの関数の返り値は不定となります。
ヒットしたタグが無かった場合はどちらの関数も-1を返します。
例
loaddll "hmjre.dll"; $target = "xxxあああいいいうううxxx"; $pattern = "(あ+)(い+)(う+)"; #n = dllfunc("FindRegular", $pattern, $target, 0); if( #n >= 0 ) { #len = dllfunc("GetLastMatchLength"); #tag1 = dllfunc("GetLastMatchTagPosition", 1); #tag1len = dllfunc("GetLastMatchTagLength", 1); #tag2 = dllfunc("GetLastMatchTagPosition", 2); #tag2len = dllfunc("GetLastMatchTagLength", 2); #tag3 = dllfunc("GetLastMatchTagPosition", 3); #tag3len = dllfunc("GetLastMatchTagLength", 3); #tag4 = dllfunc("GetLastMatchTagPosition", 4); #tag4len = dllfunc("GetLastMatchTagLength", 4); message "hit=(" + str(#n) + "," + str(#len) + ")\n" + "tag1 = (" + str(#tag1) + "," + str(#tag1len) + ")\n" + "tag2 = (" + str(#tag2) + "," + str(#tag2len) + ")\n" + "tag3 = (" + str(#tag3) + "," + str(#tag3len) + ")\n" + "tag4 = (" + str(#tag4) + "," + str(#tag4len) + ")"; } else { message "ヒットしません。"; }
例
#n = dllfunc("EnvChanged");
ReplaceRegularNoCaseSense関数は、大文字/小文字を区別しないで検索する以外は、ReplaceRegular関数とまったく同じです。
第1パラメータ(文字列型): 検索したい正規表現文字列を指定します。 第2パラメータ(文字列型): 検索対象の文字列を指定します。 第3パラメータ(数値型): 検索を開始する桁位置を指定します。先頭から検索したい場合は0を指定します。 第4パラメータ(文字列型): 検索でヒットした文字列を置換する用の文字列を指定します。
\0〜\9および\g{1}〜\g{15}のタグ付き正規表現も指定出来ます。
変換モジュールを通す用の、\(タグ番号,関数名)のような構文は使えません。第5パラメータ(数値型): 0を指定すると、最初にヒットした文字列だけを置換します。
1を指定すると、ヒットする文字列すべてを置換します。
2を指定すると、1を指定したのと同じく全置換しますが、もしも何も置換出来なかった場合にはパラメータ2で指定された文字列をそのまま返す動作となります。
第5パラメータは省略可能で、省略した場合は0を指定した扱いになります。返り値(文字列型): 検索がうまくヒットした場合は置換が実行され、その結果の文字列が返ります。ヒットしなかった場合は、もしも第5パラメータに数値の2が指定されたのでなければ""が返ります。
第5パラメータに数値の2が指定されてる場合で何もヒットしなかった場合(置換が実行されなかった場合)にはパラメータ2の文字列がそのまま返ります。
例
$s = dllfuncstr( "ReplaceRegular", "([a-z]+)([0-9]+)", "--abcdefg1234567--", 0, "\\2\\1" ); message $s;
ヒットした場合、GetLastMatchLength関数でヒットした文字列の長さが取得できます。
第1パラメータ(文字列型): 検索したい文字列を指定します。 第2パラメータ(文字列型): 検索対象の文字列を指定します。 第3パラメータ(数値型): 検索を開始する桁位置を指定します。先頭から検索したい場合は0を指定します。 第4パラメータ(文字列型): 類似検索でのミスの許容数(いわゆるレーベンシュタイン距離)を指定します。 返り値(数値型): ヒットした位置を返します。ヒットしなかった場合は-1を返します。
例
loaddll "HmJre.dll"; $find = "あいうえお"; $target1 = "xxxあいえおxxx"; //1文字足りない $target2 = "xxxあいううえおxxx"; //1文字多い $target3 = "xxxあいカえおxxx"; //1文字違う #x = dllfunc("FindSimilarMinimumMiss", $find, $target1, 0, 1); message $target1 + "\n ヒット位置 = " + str(#x) + " 長さ=" + str(dllfunc("GetLastMatchLength")) + " ミス数=" + str(dllfunc("GetLastSimilarMissCount")); #x = dllfunc("FindSimilarMinimumMiss", $find, $target2, 0, 1); message $target2 + "\n ヒット位置 = " + str(#x) + " 長さ=" + str(dllfunc("GetLastMatchLength")) + " ミス数=" + str(dllfunc("GetLastSimilarMissCount")); #x = dllfunc("FindSimilarMinimumMiss", $find, $target3, 0, 1); message $target3 + "\n ヒット位置 = " + str(#x) + " 長さ=" + str(dllfunc("GetLastMatchLength")) + " ミス数=" + str(dllfunc("GetLastSimilarMissCount"));
例
loaddll "hmjre.dll"; #xTarget = 1; //1桁目から検索の場合 $target = "\u00C0\u00C1\u00C2"; #x = dllfunc( "FindRegular", "\u00C1", $target, charindex_to_byteindex( $target, #xTarget ) ); #len = dllfunc( "GetLastMatchLength"); message "変換前: x= " + str(#x) + " len=" + str(#len); #x = byteindex_to_charindex( $target, #x ); #len = byteindex_to_charindex( midstr( $target, #x, 99999 ), #len ); message "変換後: x= " + str(#x) + " len=" + str(#len); endmacro;
例
loaddll "hmjre.dll"; #n = dllfunc("SetUnicodeIndexAutoConvert", 0); $target = "\u00C0\u00C1\u00C2"; #x = dllfunc( "FindRegular", "\u00C1", $target, 0 ); #len = dllfunc( "GetLastMatchLength"); message "変換OFF: x= " + str(#x) + " len=" + str(#len); #n = dllfunc("SetUnicodeIndexAutoConvert", 1); $target = "\u00C0\u00C1\u00C2"; #x = dllfunc( "FindRegular", "\u00C1", $target, 0 ); #len = dllfunc( "GetLastMatchLength"); message "変換ON: x= " + str(#x) + " len=" + str(#len); endmacro;
例
loaddll "hmjre.dll"; #dummy = dllfunc("SetUnicodeIndexAutoConvert", 1); #dummy = dllfunc("NotifyEncode", encode); #n = dllfunc( "FindRegular", "pattern", "target-string", 0 ); if( #n >= 0 ) { message "ヒットしました。"; }
このように変換すれば、正規表現パターンの中の「\n」や「$」が正しくヒットします。
例
$s = gettext( seltopx, seltopy, selendx, selendy ); loaddll "hmjre.dll"; $s = dllfuncstr("ReplaceRegular", "\r\n", $s, 0, "\n", 2 );
(?<=^|\n)のような正規表現パターンを使う必要があります。例えば「^abc」相当にするには「(?<=^|\n)abc」のように記述する必要があります。