0

ファイル内で 5 文字目が数字の行を探します。つまり、数字セット {0123456789} です。次のファイルを作成しました。

asdf1
asdf2

.. などを 0 まで続けます。これらの行を取得しないようにするために、特殊文字やその他の記号を使用してさらにいくつかのケースを作成しました。

ただ、ひとつ気になったことがあります。ラインを作るとき:

SSSSS3

また

TTTTTS7

つまり、すべての S がスペースで、T がタブである場合、5 番目の文字が数字ではなくスペース/タブである場合にも、その行が取得されます。

なぜこれが起こっているのか誰か説明できますか?私が使っているパターンは

'....[0-9](.)*'

私が間違っていなければ、「。」任意の文字を表しますよね? 4 つを超えるタブまたはスペースが 5 つ未満の '.' としてカウントされるのはなぜですか?

4

1 に答える 1

3

行頭アンカーがありません:

^....[0-9]

それがなければ、あたかもあなたが入力したかのように、正規表現の一致ではなく正規表現の検索egrepを実行します

.*....[0-9]

.*ただし、 は のようなフラグのキャプチャを引き起こさないという違いがあり-oます。

(.)*(末尾の も役に立たないことに注意してください。.*は、行末アンカー を置かない限り、RE の末尾に暗黙的に追加されます$。)

于 2012-05-22T15:05:29.623 に答える