1.03.4基礎
devices.txtにはdisk、disk0、disk7、disk12、diskAが1行ずつ記録されている。
diskの直後が数字1文字だけの行を抽出する。
適切な基本正規表現はどれか。
× 不正解
[[:digit:]]は数字1文字に一致する。^と$で行全体を固定すると、数字なしや2桁以上を除外できる。
詳細解説
誤り
^disk.$.は数字以外を含む任意の1文字にも一致する。
誤り。.はdiskAのAにも一致するため、数字という要件を表現できない。
誤り
^disk[:digit:]$外側の角括弧がなく、文字クラスとして解釈されない。
誤り。[:digit:]をPOSIX文字クラスとして使うには、さらに外側の角括弧を含む[[:digit:]]が必要になる。
正しい
^disk[[:digit:]]$POSIX数字クラス1文字を行頭と行末の間に限定する。
正しい。数字クラスがちょうど1文字だけ置かれ、両アンカーによりdisk0やdisk7だけが行全体で一致する。
誤り
^disk[0-9]*$*により数字が0文字または複数文字でも一致する。
誤り。*は直前要素を0回以上許すため、diskやdisk12も一致対象になる。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'disk\ndisk0\ndisk7\ndisk12\ndiskA\n' | grep '^disk[[:digit:]]$'期待される結果
disk0
disk7理解のポイント
- POSIX文字クラス
- 1文字だけに一致
- アンカーで行全体を固定
確認時の注意
- 確認環境: GNU grep 3.x / C.UTF-8ロケール
基礎のおさらい
POSIX文字クラス
[[:digit:]]や[[:space:]]は、意味に基づく文字集合を表す。
繰り返しなし
文字クラスを1回だけ書けば1文字、*を付けると0文字以上へ範囲が変わる。
問題IDKL-101-486
確認環境GNU grep 3.x / C.UTF-8ロケール
最終技術確認2026-08-13
誤り・権利侵害を報告