【正規表現】行の先頭3文字が固定長の3桁整数のファイルがあります。

その3桁の整数が000~066の範囲にない行を抽出するための正規表現を教えてください。
例えば、"067abcde"はマッチし、"059ghwad"はマッチしません。
grepで利用します。よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2006/04/20 19:46:39
  • 終了:2006/04/20 23:16:23

回答(3件)

id:ootatmt No.1

ootatmt回答回数1307ベストアンサー獲得回数652006/04/20 20:21:32

ポイント5pt

grep で利用できる形にはなっていませんが、このような感じでどうでしょうか。

my @list = <DATA>;

for (@list) {

chomp;

print "$_ - ";

if (/^(\d{3})/ and $1 > 66) {

print "match";

} else {

print "unmatch";

}

print "
\n";

}

__DATA__

067abcde

059ghwad

012hijkl

789bcdef

もしくは、次のようにすればマッチしたファイル名が@resultに入ります。

map { /^(\d{3})/; if ($1 > 66) { push @result, $_ } } @list;

id:ootatmt No.2

ootatmt回答回数1307ベストアンサー獲得回数652006/04/20 20:48:16

ポイント10pt

もう一度、これでどうでしょう。

grep でマッチしたリストを得ます。

  • @list に元のリストを入れておいて、@result にマッチしたリストが入ります。

my @result = grep scalar(/^(\d{3})/, $1 > 66), @list;

id:Chaborin

ありがとうございます。

でもごめんなさい、perlじゃないのです。

正規表現そのもので表現しきるものが必要でした。

2006/04/20 23:12:37
id:tadashi0805 No.3

tadashi0805回答回数287ベストアンサー獲得回数292006/04/20 21:08:45

ポイント65pt

(0[0-5][0-9]|06[0-6])

のように、| で複数のマッチ文字列を連結すればできますね。

1つ目が000〜059、2つ目が060〜066にマッチします。

id:Chaborin

ありがとうございます。

こちらがベストです! …と思ったら、条件が逆でした。

(0[^0-5][0-9]|06[^0-6])

ありがとうございました。終了します。

2006/04/20 23:15:11

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません