正規表現で検索してヒットした文字列を変No.10157
親指くん さん 23/05/31 14:32
 
いつもお世話になっております。
正規表現で検索してヒットした文字列を変数に入れたいです。
例えば、<sub>・・・</sub> を検索すべく、
正規表現で、"<sub>.{1,5}</sub>"で検索して、ヒットした文字列全体を変数$sに入
れるにはどうすればいいでしょうか?

[ ]
RE:10157 正規表現で検索してヒットした文No.10158
western さん 23/05/31 16:36
 
[秀丸マクロヘルプ]>[目次]>[検索系文]>[正規表現について]
[HmJre.dllのヘルプ]>[マクロからのdllfunc呼び出し]>[GetLastMatchTagPosition]
の説明のところにサンプルがあるようです

今回のお題であれば以下のマクロでいけます

$target = "abc<sub>def</sub>ghi"; // 検索する文字列
$pattern = "<sub>(.{1,5})</sub>"; // 正規表現

loaddll "hmjre.dll";
#hitPos = dllfunc("FindRegular", $pattern, $target, 0); // パターンマッチの実行
if(#hitPos == -2) {
 message "正規表現の指定に誤りがあります";
}
else if (#hitPos == -1) {
 message "正規表現にマッチしません";
}
#hitLen = dllfunc("GetLastMatchLength"); // ヒットした長さ (開始位置の #hitP
os との組で取り出し)
$match = midstr($target, #hitPos, #hitLen);

#capt1Pos = dllfunc("GetLastMatchTagPosition", 1); // 正規表現の ( ) の中を
取り出す仕組み
#capt1Len = dllfunc("GetLastMatchTagLength", 1);
$capture1 = midstr($target, #capt1Pos, #capt1Len);

message sprintf("Hit:[%s] Capt1:[%s]", $match, $capture1);

[ ]
RE:10157 正規表現で検索してヒットした文No.10160
igus さん 23/05/31 20:59
 
#x=x;#y=y;#i=0;#j=0;gofiletop;
while (1){
  searchdown "<sub>(.{1,5})</sub>",regular;
  if (!result) break;
  $s[#i]=gettext(foundtopx,foundtopy,foundendx,foundendy);
  #i=#i+1;
}
while(#j<#i){
  message "$s["+str(#j)+"]="+$s[#j];
  #j=#j+1;
}
moveto #x,#y;
endmacro;

[ ]
RE:10157 正規表現で検索してヒットした文No.10161
Iranoan さん 23/05/31 21:21
 
親指くんこんにちは Iranoan です
> 正規表現で検索してヒットした文字列を変数に入れたいです。
> 例えば、<sub>・・・</sub> を検索すべく、
> 正規表現で、"<sub>.{1,5}</sub>"で検索して、ヒットした文字列全体を変数$sに
>入れるにはどうすればいいでしょうか?
編集ウィンドウ内の文字列を取得するなら次の要領で取得できます
searchdown "<sub>.{1,5}</sub>", regular;
if(result) {
  $s = gettext(foundtopx, foundtopy, foundendx, foundendy);
}

[ ]