検索のパターンに@を付けるだけにしたいNo.09564
styth さん 21/09/09 12:13
 
HmJre.dllヘルプの「マクロからのdllfunc呼び出し」のサンプル

>例
>loaddll "hmjre.dll";
>$target = "xxxあああいいいうううxxx";
>$pattern = "(あ+)(い+)(う+)";
>#n = dllfunc("FindRegular", $pattern, $target, 0);
>if( #n >= 0 ) {

 ここの

 $patternを以下のようにして、urlを含む文字列を検索します。(上の$targetでは、
ありません)

//$pattern1 ="@\"(https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+\"";
  $pattern2 ="@\"(https?|ftp)://[!#$%&*+,\\\\-\\./0-9:;=?@a-z^_|~]+\"";
  $pattern =  "\"(https?|ftp)://[!#$%&*+,\\\\-\\./0-9:;=?@a-z^_|~]+\"";

 $pattern1では、\を付けるように指示が出るので、
 $pattern2にしました。これだと、urlにヒットしないので、
 $pattern にしました。これで、できているんですが、

 パターンの先頭に@だけ付けて、ヒットするようにしたいのですが、使い方が間違
っていますでしょうか?

 パターンは、
「ファイルタイプ別の設定− デザイン− Email,URL,ファイル名のカラー表示のカス
タマイズ 」
 から引用しました。

[ ]
RE:09564 検索のパターンに@を付けるだけNo.09565
でるもんたいいじま さん 21/09/09 12:26
 
秀丸愛用者の「でるもんた・いいじま」です。

> //$pattern1 ="@\"(https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+\"";
>   $pattern2 ="@\"(https?|ftp)://[!#$%&*+,\\\\-\\./0-9:;=?@a-z^_|~]+\"";
>   $pattern =  "\"(https?|ftp)://[!#$%&*+,\\\\-\\./0-9:;=?@a-z^_|~]+\"";
>
>  $pattern1では、\を付けるように指示が出るので、
>  $pattern2にしました。これだと、urlにヒットしないので、
>  $pattern にしました。これで、できているんですが、
>
>  パターンの先頭に@だけ付けて、ヒットするようにしたいのですが、使い方が間
>違っていますでしょうか?

@ は "" の外側につけます。
ついでにいうと、 @"..." の中に " 自身を入れたいときは "" とします。
(Excelも同じルールですね。)

つまり、
$pattern3 =@"""(https?|ftp)://[!#$%&*+,\-\./0-9:;=?@a-z^_|~]+""";
でいけるはずです。

stythさんの最終形の $pattern では \\\\-\\. という部分が「\ から . まで」とい
う意味になって、\ と . の文字コードを比べると前者のほうが大きいので、結局意
味を為さないように思えるのですが、どうなんでしょう?>担当様、秀まるお様

[ ]
RE:09565 検索のパターンに@を付けるだけNo.09566
styth さん 21/09/10 00:10
 
コメント、ありがとうございます。教えて頂いたパターンでやってみました。

loaddll "hmjre.dll";
$target = "https://www.maruo.co.jp/hidesoft/4/wide4.html";
$pattern = @"""(https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+""";
#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 midstr($target, #n, #len);
   
    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 "ヒットしません。";
}
endmacro;

 上記マクロを実行すると、"ヒットしません。"と表示されます。
 マクロ2行目のhttps://www.maruo.co.jp/hidesoft/4/wide4.htmlは、紫色になっ
ています。

 マクロ2行目全体をクリップボードにコピーして、
loaddll "hmjre.dll";
beginclipboardread;
$target = getclipboard;
$pattern = @"""(https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+""";
#n = dllfunc("FindRegular", $pattern, $target, 0);
if( #n >= 0 ) {
(以下同じ)

 を実行すると、ヒットします。
 何か、おかしいんですが、どこか間違っていますでしょうか?

[ ]
RE:09566 検索のパターンに@を付けるだけNo.09567
styth さん 21/09/10 00:27
 
(追伸)

 最初の投稿の
>$pattern にしました。これで、できているんですが、
 この時も、クリップボードを使っています。

[ ]
RE:09566 検索のパターンに@を付けるだけNo.09568
でるもんたいいじま さん 21/09/10 00:52
 
でるもんた・いいでまです。

> コメント、ありがとうございます。教えて頂いたパターンでやってみました。
>
> loaddll "hmjre.dll";
> $target = "https://www.maruo.co.jp/hidesoft/4/wide4.html";
> $pattern = @"""(https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+""";
...
>  上記マクロを実行すると、"ヒットしません。"と表示されます。

当然です。この $pattern が示しているのはURLそのものではなくて、「URLの前後を
 " でくくったもの」です。$targetに代入している文字列はURL本体だけで、前後の
" は $target には含まれていませんから(message $target; で確認できます)、ヒ
ットしないのが当然です。

そして、

> マクロ2行目全体をクリップボードにコピーして

の場合だと、コピーした内容には確かに「URLを " でくくったもの」が含まれていま
すから、その通りにヒットするのです。

結局、マクロの3行目を次のように変更すればお望みのことができるはずです。
$pattern = @"(https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+";
(""" と3つ続いていたのを、1つだけにする)

[ ]
RE:09568 検索のパターンに@を付けるだけNo.09569
styth さん 21/09/10 07:55
 
>結局、マクロの3行目を次のように変更すればお望みのことができるはずです。
>$pattern = @"(https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+";
>(""" と3つ続いていたのを、1つだけにする)
 ありがとうございます。できました。

 searchup2 @"(https?|ftp)://[!#$%&*+,\-./0-9:;=?@a-z^_|~]+", regular;

 これと、同じものを、$pattern = に書けば良いんですね。
 そもそも、@も”で囲もうとしていたのが、間違いでした。

[ ]