HMJRE \wを使った検索No.06087
h-tom さん 04/11/06 11:18
 

h-tom です。

HMJRE.DLL使用時、"t\w"を検索するとマッチしません。
"\w"の前にアルファベットがあると駄目なようです。
"\w"単独では問題ありません。

//テストデータ
test_check
check_test0
test_1check
turukame_1
turu1kame
hidemaru
abcdefghijklmnopqrstuvwxyz0123456789
0123456789abcdefghijklmnopqrstuvwxyz

//結果
検索DLL=HMJRE.DLL
検索文字:t\w
検索終了
検索DLL=JRE32.DLL
検索文字:t\w
  test_check
  test
  test_
  turukame_
  turu
  tuvwxyz
  tuvwxyz
検索終了
検索DLL=BRegIf.dll
検索文字:t\w+
  test_check
  test0
  test_1check
  turukame_1
  turu1kame
  tuvwxyz0123456789
  tuvwxyz
検索終了
macro end...

//テストマクロ
debuginfo 1;
openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Env";
if(result){
    $search = input("検索文字", "t\\w");
    $dll_name = getregstr("JreDll");
    call search_main $search;
    writeregstr "JreDll", "JRE32.DLL";
    envchanged;
    call search_main $search;
    writeregstr "JreDll", "BRegIf.dll";
    envchanged;
    call search_main $search + "+";
    writeregstr "JreDll", $dll_name;
    envchanged;
    closereg;
    debuginfo "macro end...";
}
endmacro;
search_main:
    debuginfo "検索DLL=" + getregstr("JreDll");;
    debuginfo "検索文字:" + $$1;
    gofiletop;
    searchdown2 $$1, regular;
    #ret = result;
    while(#ret){
        debuginfo "  " +gettext(foundtopx, foundtopy, foundendx, foundendy);
        moveto foundendx, foundendy;
        searchdown $$1, regular;
        #ret = result;
    }
    debuginfo "検索終了";
return;

[ ]
RE:06087 HMJRE \wを使った検索No.06088
Iranoan さん 04/11/06 11:49
 
 h-tom さん今日は、Iranoan です。
> HMJRE.DLL使用時、"t\w"を検索するとマッチしません。
> "\w"の前にアルファベットがあると駄目なようです。
 HmJre.dll で \w は Perl 等の [A-Za-z_] ではなく、英単語つまり
\<[A-Za-z_]+\> に当たるので、前後に英字と「_」を指定すると、何れにも
ヒットしません。Jre32.dll ではヒットしますが、寧ろこちらの動作がおかし
いと思います。BRegIf.dll は Perl 互換なので、元々の仕様が異なります。

 もし t で始まる単語を調べたければ、t\< か \<t[A-Za-z_]*\> を指定する
か、t[A-Za-z_]* を指定して「単語の検索」も ON にすればよいでしょう。

[ ]
RE:06088 HMJRE\wを使った検索No.06089
h-tom さん 04/11/06 12:45
 

h-tom です。

> HmJre.dll で \w は Perl 等の [A-Za-z_] ではなく、英単語つまり
>\<[A-Za-z_]+\> に当たるので、前後に英字と「_」を指定すると、何れにも
>ヒットしません。Jre32.dll ではヒットしますが、寧ろこちらの動作がおかし
>いと思います。BRegIf.dll は Perl 互換なので、元々の仕様が異なります。
"[A-Za-z_]+"ではなかったのですね。
JRE32.DLLの動きがそうだったので、てっきりそうだと思ってました。

[ ]