@を含まない行を削除するには?No.06329
バク さん 00/08/13 17:22
 

御世話になっています。
win98 秀丸Ver3.05です。

最近正規表現を勉強しだしたのですが
自力で、まだ出来そうもないので教えてください。

@を含まない行を削除するには・・です。

(例)
------------------
aaaaaaaaaaa
bbbbbbbbbbb
ccccc@ccccc

 実行↓

ccccc@ccccc
------------------

行末は全て改行されています。
@を含む行は、そのまま残し
@を含まない行を削除するです。

マクロ等まだ出来ないので、置換で出来れば
お願いします。 m(_)m



[ ]
RE:06329 @を含まない行を削除するには?No.06330
Arimac さん 00/08/13 19:22
 
>@を含まない行を削除するには・・です。

@を含む行をgrepしてはどうでしょうか?(^^;

[ ]
RE:06329 @を含まない行を削除するには?No.06333
Kaisan さん 00/08/14 16:04
 
> @を含まない行を削除するには・・です。
:
:
> 行末は全て改行されています。
> @を含む行は、そのまま残し
> @を含まない行を削除するです。

置き換えで正規表現をオンにして
 検索:^[^@]*\n
 置換:          ・・・入力しない
でできます。

正規表現で先頭に^を付けると行頭を表します。

[〜]で囲むと囲まれた文字(〜)のいずれかにマッチします。
例:[abc] はaかbかcにマッチします。同じ事を[a-z]と書くこともできます。

[^〜]の様に[の次に^を書くと指定された文字(〜)以外にマッチします。
例:[^@] は@以外の文字にマッチします。(注:改行文字にはマッチしません)

*は、一つ前の文字の《0回以上》の繰り返しになります。
例:[a-zA-Z][a-zA-Z]* は1字以上の連続する英字にマッチします。
注:[a-zA-Z]* だけでは必ず検索位置でマッチします。
  検索:[a-zA-Z]*、置換:+、対象:123456、1つ置き換え:+123456
  全文置き換えでは無限ループします。(+++++...+123456)

\n は改行にマッチします。

 検索:^[^@]*\n
 置換:          ・・・入力しない
を直訳すると、
 「行頭から@以外の文字が0個以上続いていて改行までをなにもない
 文字列に置き換える。」
つまり、
 「@以外の文字だけで構成されている行を削除する」になります。

[ ]
RE:06330 @を含まない行を削除するには?No.06334
ひろ さん 00/08/14 18:53
 
  バクさん、Arimacさん今日は、ひろです。
> >@を含まない行を削除するには・・です。
>
> @を含む行をgrepしてはどうでしょうか?(^^;
 こっちの方が解りやすいですが、検索文字列を「^[^@]*\n」で、正規表現
を ON にすれば良いと思います。

[ ]
RE:06334 @を含まない行を削除するには?No.06337
バク さん 00/08/15 00:14
 
Arimacさん、 ひろ さんどうも有難う御座います。

>> >@を含まない行を削除するには・・です。
>>
>> @を含む行をgrepしてはどうでしょうか?(^^;
> こっちの方が解りやすいですが、検索文字列を「^[^@]*\n」で、正規表現
>を ON にすれば良いと思います。

grepを初めて使いました。う〜ん。便利

「^[^@]*\n」もつかって見ます。

[ ]
RE:06333 @を含まない行を削除するには?No.06338
バク さん 00/08/15 00:20
 
Kaisan さん。丁寧な解説多謝です。

>> @を含まない行を削除するには・・です。
>:
>:
>> 行末は全て改行されています。
>> @を含む行は、そのまま残し
>> @を含まない行を削除するです。
>
>置き換えで正規表現をオンにして
> 検索:^[^@]*\n
> 置換:          ・・・入力しない
>でできます。

見事できました!

>
>正規表現で先頭に^を付けると行頭を表します。
>
>[〜]で囲むと囲まれた文字(〜)のいずれかにマッチします。
>例:[abc] はaかbかcにマッチします。同じ事を[a-z]と書くこともできます。
>
>[^〜]の様に[の次に^を書くと指定された文字(〜)以外にマッチします。
>例:[^@] は@以外の文字にマッチします。(注:改行文字にはマッチしません)
>
>*は、一つ前の文字の《0回以上》の繰り返しになります。
>例:[a-zA-Z][a-zA-Z]* は1字以上の連続する英字にマッチします。
>注:[a-zA-Z]* だけでは必ず検索位置でマッチします。
>  検索:[a-zA-Z]*、置換:+、対象:123456、1つ置き換え:+123456
>  全文置き換えでは無限ループします。(+++++...+123456)
>
>\n は改行にマッチします。
>
> 検索:^[^@]*\n
> 置換:          ・・・入力しない
>を直訳すると、
> 「行頭から@以外の文字が0個以上続いていて改行までをなにもない
> 文字列に置き換える。」
>つまり、
> 「@以外の文字だけで構成されている行を削除する」になります。

正規表現ピンとこなかったのですが、だんだんなじんで来ました。
本当に有難う御座いました。

[ ]
RE:06333 @を含まない行を削除するには?No.06343
きいろいまふらあ さん 00/08/16 00:40
 
きいろいまふらあです。
つけたし。

>*は、一つ前の文字の《0回以上》の繰り返しになります。
>例:[a-zA-Z][a-zA-Z]* は1字以上の連続する英字にマッチします。

1字以上の繰り返しは+でもいけます。[A-Za-z]+とかね。

>注:[a-zA-Z]* だけでは必ず検索位置でマッチします。

検索「開始」位置。ですね。
「検索文字列に、長さ0の文字列が該当するような記述をしちゃだめ」
ってことですね。そもそも意味がないわけですが。

おじゃましました。

[ ]