正規表現の検索No.03027
YK さん 02/03/04 23:28
 
こんにちは。お世話になっています。
正規表現の検索について、教えていただけないでしょうか。
マクロで次のような検索をしたいのですが、うまくいきません。
$aの中の"+"を"\+"とすればよいのだと思いますが、$aが未知の内容(文字列は
与えられるが内容は不明)だとしても、うまく行くやり方はないでしょうか。
一行では無理でしょうか。よろしくお願いします。


文書内の次の行を検索したい。
---
主題:    1+2=3
---

うまくいかないマクロ。

$a="1+2=3";
searchdown "主題:[ \t]*"+$a ,regular;

[ ]
RE:03027 正規表現の検索No.03028
山紫水明 さん 02/03/05 08:21
 
 YKさん,こんにちは。

》うまくいかないマクロ。
》$a="1+2=3";
》searchdown "主題:[ \t]*"+$a ,regular;

 文字列の中のメタキャラクタをエスケープする方法は,すべて秀丸マクロで書
く方法もあると思いますが,少し面倒なので誰かにお願いするとして,ここでは
田楽DLLを利用してみます。
 (田楽DLLはご存じだと思いますが,ライブラリに登録されています)

//--------------------------------------------
$a = "1+2=4";
loaddll "DengakuDLL.dll";
$a = dllfuncstr( "GSUB", $a, "+", "\\+", -1 );
searchdown "主題:[ \t]*" + $a, regular;
freedll;
endmacro;
//--------------------------------------------

あと必要であれば,
$a = dllfuncstr( "GSUB", $a, "*", "\\*", - 1 );
$a = dllfuncstr( "GSUB", $a, ".", "\\.", - 1 );
なども加えておくとよいでしょう。

     では, (^^)/~
                                        山紫水明

[ ]
RE:03027 正規表現の検索No.03029
ひろ さん 02/03/05 13:09
 
 YK さん今日は、ひろです。
> $aの中の"+"を"\+"とすればよいのだと思いますが、$aが未知の内容(文字列は
> 与えられるが内容は不明)だとしても、うまく行くやり方はないでしょうか。
 要するに、$a は任意に与えられるので、「+」が含まれている場合に限り、
「\+」に置き換えたいということでしょうか? それなら、バファ内で文字列を
置換すればよいです。具体的には、末尾のようなサブルーチンを利用します。
//---------- 正規表現のメタキャラクタの置換サンプル -----------------
$$return="1+2=3";
call ChangeCharacter $$return, "\\","\\\\";//これは最初
call ChangeCharacter $$return, "+","\\+";
call ChangeCharacter $$return, "[","\\[";
call ChangeCharacter $$return, "]","\\]";
call ChangeCharacter $$return, "(","\\(";
call ChangeCharacter $$return, ")","\\)";
call ChangeCharacter $$return, ".","\\.";
call ChangeCharacter $$return, "*","\\*";
call ChangeCharacter $$return, "?","\\?";
call ChangeCharacter $$return, "^","\\^";
call ChangeCharacter $$return, "$","\\$";
call ChangeCharacter $$return, "|","\\|";
searchdown "主題:[ \t]*"+$$return ,regular;
endmacro;

ChangeCharacter://buff 中の文字列を置換
//$$1:buff
//$$2:検索文字列
//$$3:置換文字列
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:03027 正規表現の検索No.03030
YK さん 02/03/06 00:05
 
山紫水明さん、ひろさん、こんにちは。
コメントありがとうございました。

田楽DLLを使う方法、マクロで置き換える方法とも、よくわかりました。
使ってみます。ありがとうございました。

[ ]