1.03.4標準
names.txtから、行全体がapi.v1である行だけを抽出する。
api-v1、oldapi.v1、api.v10は除外する。
適切な基本正規表現はどれか。
× 不正解
正規表現の.は任意の1文字を表す。\.または[.]で文字として扱い、^と$で行全体を限定する。
詳細解説
誤り
^api.v1$.が任意の1文字としてapi-v1にも一致する。
誤り。.がハイフンにも一致するためapi-v1を誤って含める。
誤り
^api[.]v1ピリオドは固定できるが、行末を固定せずapi.v10にも一致する。
誤り。[.]で点は固定できるが末尾アンカーがなく、api.v10の先頭部分にも一致する。
誤り
api\.v1$行頭を固定せずoldapi.v1にも一致する。
誤り。点と行末は固定できても行頭アンカーがなく、oldapi.v1の末尾部分に一致する。
正しい
^api\.v1$\.でピリオドを文字化し、両端のアンカーで完全一致させる。
正しい。\.が点を文字として扱い、^と$がapi.v1以外の前後文字を許さない。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'api.v1\napi-v1\noldapi.v1\napi.v10\n' | grep '^api\.v1$'期待される結果
api.v1理解のポイント
- .は任意の1文字
- \.はリテラルの点
- 完全一致には両端アンカー
確認時の注意
- 確認環境: GNU grep 3.x
基礎のおさらい
メタ文字のリテラル化
特別な記号そのものを探すには、エスケープまたは適切な文字クラスを使う。
完全一致
先頭と末尾を同時に固定することで、接頭辞や接尾辞を持つ長い文字列を除外できる。
問題IDKL-101-487
確認環境GNU grep 3.x
最終技術確認2026-08-13
誤り・権利侵害を報告