正規表現の単語検索についてNo.10128
まっきょす さん 22/08/24 10:50
 
grepや検索するときの、正規表現についてご質問があります。

「単語の検索」にチェックを入れたときなのですが、例えば

.*printf.*で検索したときに、
sprintf がヒットするのは正しいのでしょうか?

詳しい仕様は分かっていませんが、昔はヒットしなかった気がするのですが、、

Version 9.17  64bit edition
HMJRE.DLL V5.31

[ ]
RE:10128 正規表現の単語検索についてNo.10129
秀まるお2 さん 22/08/24 11:03
 
 こちらは秀丸メールのサポート会議室なんですが、簡単なのでこのままお返事させ
ていただきます。

 まず、正規表現と「単語の検索」の両方ONだと、基本的には正規表現でマッチング
が実行されて、その結果ヒットした文字列が「単語かどうか」判定し、単語と見なさ
れない場合はヒットしなかった扱いになります。

> 詳しい仕様は分かっていませんが、昔はヒットしなかった気がするのですが、、

 仕組み的にはヒットして間違ってないと思います。
 (旧バーションでテストした訳じゃないですが)

 sprintfが「.*printf.*」でヒットするのは正規表現的に間違ってないし、「sprin
tf」が「単語の検索」的にも間違ってないと思います。

 ちなみにですが、正規表現パターンの中にも単語かどうかを判定するルールがあり
ます。今回のケースだと、

    \<.*sprintf.*\>

 とするか、または「sprintf」という単語を含む1行全体にヒットさせたいなら、

    .*\<sprintf\>.*

 のように記述できます。

[ ]
RE:10129 正規表現の単語検索についてNo.10130
まっきょす さん 22/08/24 11:25
 
>こちらは秀丸メールのサポート会議室なんですが、簡単なのでこのままお返事させ
>ていただきます。
申し訳ありません。。 以後気を付けます。。

printfだけで「単語の検索」したときにはsprintfはヒットしないので、
ヒットしなくてもいいのでは・・と思いご質問しました。

ただ、やりたかったことは分かりましたので、問題はなくなりました。

単語printfを含む行を削除したく、「grepして置換」で.*printf.*\n をしたのですが、
sprintfも削除されてしまい困っていました。

.*\<printf\>.*\n で問題解決しました。
ご回答ありがとうございました。

[ ]