[ 新規に投稿する ]

スペース区切りで複数語GREPができるマクロ の正規表現についてNo.00478
にしかぜ さん 17/09/20 15:50 [ コメントを投稿する ]
  山紫水明さん
「スペース区切りで複数語GREPができるマクロ」
使わせてもらっています。

複数の語を AND 検索する際に "(?=.*ABC)(?=.*DEF)" の形に置き換えているかと思います。
この先頭に "^" 「行頭から」の指定をすると高速化が見込めます。
正確な時間は測ってはいないのですが、
手元のファイル群では "ABC DEF XYZ" のような検索で3秒程度から、1秒未満程度に高速化がされました。

AndGrep.mac(62)
~~~
  if( $search2 != "" ) {
-     $search2 = "(?=.*" + $search2 + ")";
+     $search2 = "^(?=.*" + $search2 + ")";
  } else {
~~~

ほかのケースで問題がないようでしたら参考になさって下さい。
よろしくお願いします。
[ ]
RE:00478 スペース区切りで複数語GREPができるマクロ の正規表No.00479
にしかぜ さん 17/09/20 16:54 [ コメントを投稿する ]
  もう一つ。
先読みの ".*" を ".*?" とすることで高速化する可能性があります。

~~~
$search2 = dllfuncstr("ReplaceRegular", "[  ]+", $search, 0, ")(?=.*?", 2);
~~~
~~~
$search2 = "^(?=.*?" + $search2 + ")";
~~~
これは計測できていないのですが、効果がある可能性があります。
[ ]
RE:00479 スペース区切りで複数語GREPがでNo.00480
山紫水明 さん 17/09/21 08:52 [ コメントを投稿する ]
   にしかぜさん,

 高速化の興味深いご提案ありがとうございます。
 こちらでもいろいろ試してみたいと思います。

                    山紫水明
[ ]
RE:00480 スペース区切りで複数語GREPがでNo.00481
山紫水明 さん 17/09/25 22:12 [ コメントを投稿する ]
   にしかぜさん,

>この先頭に "^" 「行頭から」の指定をすると高速化が見込めます。

 こちらの方は確かに劇的な効果がありました。私のデータでは20秒程→5秒程
に短縮されました。

>もう一つ。
>先読みの ".*" を ".*?" とすることで高速化する可能性があります。

 こちらの方は5.0秒→4.8〜4.9秒ぐらいの結果でした。

 とりあえず,最初の方の案を採用させていただいて,ホームページにアップし
ておきました。ありがとうございました。

                  山紫水明
[ ]
RE:00481 スペース区切りで複数語GREPがでNo.00482
レモン さん 17/09/26 16:58 [ コメントを投稿する ]
  山紫水明さん、こんにちは。
ホームページのダウンロードファイル名は「AndGrep204b3.zip」ですが、
中身は2.04β2のままです。
[ ]
RE:00482 スペース区切りで複数語GREPがでNo.00483
山紫水明 さん 17/09/26 20:24 [ コメントを投稿する ]
   レモンさん,

 すみません,間違ってしまいました。
 入れ替えました。ご指摘ありがとうございました。

                    山紫水明
[ ]
RE:00483 スペース区切りで複数語GREPがでNo.00484
にしかぜ さん 17/10/03 00:19 [ コメントを投稿する ]
  案を採用していただき、ありがとうございます。
自分の環境でも良好に動作しています。


".*?" は 秀丸エディタヘルプの正規表現のページ、
「目次− 検索系コマンド− 正規表現− *?・+?・??・{n,m}? 繰り返しマッチングでのものぐさ指定」のページで

> また、正規表現のマッチング処理自体も、ものぐさ指定した方が動作速度が速くなる可能性が高いです。

と書かれているのにあとから気づきました。
正規表現の動作としては内部的にバックトラック動作を削減できる、ということなのでしょう。
[ ]

[ 新規に投稿する ]