数字で終わる単語を正確に検索したいNo.02704
takat さん 99/03/24 12:03
 
takat です。はじめまして。

「数字で終わる単語」を正確に検索 or grep しようとして悩んでいます。

たとえば、"abc1" と "abc12" と "abc123" という単語があって、
"abc123" は検索できますが、"abc1" を検索しようとすると、
後のふたつも引っかかってしまいます。

また "abc1" を正規表現 "\<abc1\>" で書くと、何も引っかかってきません。

C(C++)言語ソースの特定の変数名を抽出しようとしてこれを試しています。
# こういう変数名の付け方も問題ではありますが...

適当なマクロまたは方法はありませんか?
どなたか、ご教示、お願いいたします。

[ ]
RE:02704 数字で終わる単語を正確に検索しNo.02706
プックン さん 99/03/24 13:02
 
takat さんはじめまして。

 >たとえば、"abc1" と "abc12" と "abc123" という単語があって、
 >"abc123" は検索できますが、"abc1" を検索しようとすると、
 >後のふたつも引っかかってしまいます。

 検索のときに単語の検索(W)をクリックすれば、ご希望の動作
 になるとおもいます。

 マクロの場合、
 searchdown "abc1",word;
 等とすればいいとおもいます。

文字列abc + "1から9のどれか"の文字列とする場合
abc0 or abc1 or abc2 or abc3 or abc4 or
abc5 or abc6 or abc7 or abc8 or abc9 を検索する場合、

 searchdown "abc[1][^A-Z,a-z,0-9]",regular;

というのも検索できるかな。
[^A-Z,a-z,0-9]
というのは、アルファベットAからZ,小文字アルファベットaからz,
数字0-9を除いた文字列という意味です。

[ ]
RE:02706 数字で終わる単語を正確に検索しNo.02709
Arimac さん 99/03/24 20:27
 
> 検索のときに単語の検索(W)をクリックすれば、ご希望の動作
> になるとおもいます。

カラー版でない秀丸の場合は「単語」というのは
単純にアルファベットだけなのでtakatさんの望むようには
なりません(^^;

カラー版秀丸では動作環境に
「単語の検索で"abc"を検索する時、"abc123"にはヒットさせない」
(高度なカーソル)
というオプションが付いたのでこれをオンにすれば良いです。

[ ]
RE:02709 数字で終わる単語を正確に検索しNo.02710
Arimac さん 99/03/24 20:46
 
自己レスです(^^;

>カラー版でない秀丸の場合は「単語」というのは
>単純にアルファベットだけなのでtakatさんの望むようには
>なりません(^^;
>
>カラー版秀丸では動作環境に
>「単語の検索で"abc"を検索する時、"abc123"にはヒットさせない」
>(高度なカーソル)
>というオプションが付いたのでこれをオンにすれば良いです。

オフの場合でも検索文字列がabc1の場合はabc123には
ヒットしませんでした(^^;

いったいどうなっているんだ〜(^^;

[ ]
RE:02710 数字で終わる単語を正確に検索しNo.02711
プックン さん 99/03/25 15:15
 
Arimac さん、こんにちは。

>>カラー版秀丸では動作環境に
>>「単語の検索で"abc"を検索する時、"abc123"にはヒットさせない」
>>(高度なカーソル)
>>というオプションが付いたのでこれをオンにすれば良いです。
>
>オフの場合でも検索文字列がabc1の場合はabc123には
>ヒットしませんでした(^^;
>
>いったいどうなっているんだ〜(^^;

これって、秀丸カラー化バージョンの強調文字列
の設定に関連することで、正規化表現の検索には、関係しないのでは?。

[ ]
RE:02711 数字で終わる単語を正確に検索しNo.02712
takat さん 99/03/25 18:44
 
プックン さん、Arimac さん、はじめまして。
回答ありがとうございます。

いろいろな検索方法をを試してみました。
ここでは検索対象の単語を5つに増やします。
"abc" "abcd" "abc1" "abc12" "abc123"

普通に "abc" を検索した場合 ===> 全部ひっかかります。
<単語の検索>をONにして "abc" を検索 ===> "abcd" 以外のすべてがひっかかり
ます。
<単語の検索>をONにして "abc1" を検索 ===> "abc1" だけがひっかかります。
<正規表現>をONにして "\<abc\>" を検索 ===> "abcd" 以外のすべてがひっかか
ります。
<正規表現>をONにして "\<abc1\>" を検索 ===> 何もひっかかりません。

つまり、<単語の検索>をONにしても検索文字列の末尾が数字でない場合、
誤って、末尾が数字の単語をひっかけてしまう。

検索文字列の末尾が数字の場合<単語の検索>は正常。

UNIX 風な正規表現 \<...\> (完全一致)は、検索文字列の末尾が数字のとき
検索しない。(これはヘルプには書いていませんが、使えるみたい)

のではないか?ということです。

<単語の検索>は便利なので、今ではこの方法で検索していますが、上のような
条件の場合はお手上げです。(自分の目で見て判断)
ただし、<単語の検索>をONにしたままで、検索ダイアログを閉じ、再び検索
するとき、OFFになっているのが不便です。

# カラー秀丸ではまだ試していません。

[ ]
RE:02711 数字で終わる単語を正確に検索No.02714
秀丸担当 さん 99/03/25 18:52
 
>>オフの場合でも検索文字列がabc1の場合はabc123には
>>ヒットしませんでした(^^;
>>
>>いったいどうなっているんだ〜(^^;
>
>これって、秀丸カラー化バージョンの強調文字列
>の設定に関連することで、正規化表現の検索には、関係しないのでは?。

「単語の検索で"abc"を検索する時、"abc123"にはヒットさせない」
は、"abc"を検索したとき、"abc"と"abc123"でヒットの違いがでます。

"abc1"を検索したとき、"abc1"と"abc123"は、必ず両方ヒットします。

正規表現をonにして"abc1[^0-9]"とやるとそれなりに近い結果がでます。

[ ]
RE:02712 数字で終わる単語を正確に検索しNo.02715
番頭++ さん 99/03/25 20:32
 
//  こんな感じでマクロにします。

//*5    q1.mac - 1999/03/25 - K.N.
//*5    typein "wk1?";  ? - は数字の指定 。。。
//*5    test data - wk1, wk11, wk111, wk1111;
    if( selecting && ( seltopy == selendy)){
        $wk1 = gettext(seltopx,seltopy,selendx,selendy);
    }
    $wk2 = input("Typein String",$wk1);
    if( ( ! result ) || $wk2 == "" ){   endmacro;   }
    escape; right;
    #i = 0;
    $wk1 = "";
    if( strstr($wk2,"?") != -1){    $wk1 = "\\<";   }
    while( #i < strlen($wk2) ){
        if( midstr($wk2,#i,1) == "?" ){
            $wk1 = $wk1 + "[0-9]";
            #k = #k + 1;
            #j = yes;
        } else {
            $wk1 = $wk1 + midstr($wk2,#i,1);
            #j = no;
        }
        #i = #i + 1;
    }
    if( #k ){
        if( #j ){   $wk1 = $wk1 + "[^0-9]"; }
//D message $wk1;
        searchdown $wk1, regular, inselect;
    } else {
//D message $wk1;
        searchdown $wk1, word, inselect;
    }
endmacro;

[ ]
RE:02712 数字で終わる単語を正確に検索しNo.02717
Arimac さん 99/03/25 22:42
 
takatさん、プックンさん、秀丸担当さん、番頭++さん、今晩は(^^;

> <単語の検索>は便利なので、今ではこの方法で検索していますが、上のような
> 条件の場合はお手上げです。(自分の目で見て判断)
単語の検索を色々試してみましたが、takatさんの例に加えて
"aabc" "aabcd" "aabc1" "aabc12" "aabc123"
"a1abc" "a1abcd" "a1abc1" "a1abc12" "a1abc123"
"1abc" "1abcd" "1abc1" "1abc12" "1abc123"
"11abc" "11abcd" "11abc1" "11abc12" "11abc123"
の場合だと
"abc" なら "a1abc" "a1abc1" "a1abc12" "a1abc123" がヒット。
"abc1" なら "a1abc1" がヒット。
"1abc" なら ("1abc") "1abc1" "1abc12" "1abc123" がヒット。
となりました。

カラー版秀丸で
「単語の検索で"abc"を検索する時、"abc123"にはヒットさせない」
とした場合は
上記のパターンでは "1abc" が "1abc" にヒットしただけ
となりました(^^;

"_"は英字扱いのようなので、カラー版秀丸ならC言語の識別子の
検索には問題なく使えるみたいです(^^;

[ ]