正規表現(grep)で、特定文字の後ろを検索No.21357
Samz さん 06/05/26 13:07
 
正規表現(grep)で、特定文字の後ろを検索させたくないのですが、方法が判りません。
簡単な正規表現しか理解出来ていないのですが、例えば下記の場合、

HogeTestSample'Abc
HogeSampleTest'Def
Hoge 'TestSampleAbc
Hogefoo'SampleTestDef
'SampleTestAbc
'Test

のテキストから、"Test"の文字を検索する際、"'"が前に「あるもの」を検索するには、
\'.*Test
で良いのですが、逆に"'"が前に「ないもの」を検索したい時、
(上2行のみ検索したい)
[^\'].*Test
とすると、下1行以外が、対象になってしまいます。
^[^\'].*Test
ならば、下2行以外が、対象になってしまいます。
色々調べてみて、他にも、
(?<!\')Test      <3行目と下1行が対象外>
(?<!\').*Test    <全て対象>
でも駄目でした。

なんとか上2行のみ検索したいのですが、方法はありますでしょうか?

[ ]
RE:21357 正規表現(grep)で、特定文字の後No.21358
Kaisan さん 06/05/26 14:36
 
惜しいところまで行っています。

> ^[^\'].*Test
が、どういう意味かもう一度考えると、なぜ
> ならば、下2行以外が、対象になってしまいます。
に、なるか分かると思います。

そうすると、自ずと答えが出てきます。


PS.
 正規表現で「'」はメタキャラではないため、
 あえて\を前に書く必要は有りません。


[ ]
RE:21357 正規表現(grep)で、特定文字の後No.21359
クラフト さん 06/05/26 14:48
 
Kaisanさんがかかれているとおり、
非常に惜しいところまで行っています。

急ぎで質問されているかもしれないということで、
答えを示しておくと、

^[^']+Test

になります。
なぜ期待した結果になるのかは式を分解して、理解してみてください。

[ ]
RE:21359 正規表現(grep)で、特定文字の後No.21360
Kaisan さん 06/05/26 15:41
 

> ^[^']+Test
でもよいのですが、

命題が
> 正規表現(grep)で、特定文字の後ろを検索させたくないのですが、方法が判りませ
>ん。
なので

^[^']*Test

の方がよいと思います。

^[^']+Test の場合

TestSample'Abc

に、ヒットしません。

[ ]
RE:21360 正規表現(grep)で、特定文字の後No.21361
クラフト さん 06/05/26 15:48
 
>命題が
>> 正規表現(grep)で、特定文字の後ろを検索させたくないのですが、方法が判りま
>せん。
>なので
>
>^[^']*Test
>
>の方がよいと思います。
>
>^[^']+Test の場合
>
>TestSample'Abc
>
>に、ヒットしません。

あーなるほど。そうでしたね。
ご指摘ありがとうございます。

[ ]
RE:21361 正規表現(grep)で、特定文字の後No.21363
Samz さん 06/05/26 17:03
 
ありがとうございます。
とりあえず、

^[^']*Test

でいける事を確認出来ました。
答えが判ってしまうと、
^[^'].*Test
では駄目な理由も理解出来ました。
途中の"'"が、".*"に含まれてしまうのですね。
回答頂いた表現も、今は理解出来ましたが、
まだまだ応用は難しいです。

早々のご回答に、本当に感謝致します。

[ ]