基本情報技術者 2016年 春期 午前(科目A) 問03
問題文
UNIXにおける正規表現[A-Z]+[0-9]*が表現する文字列の集合の要素となるものはどれか。ここで、正規表現は次の規則に従う。
[A-Z]は、大文字の英字1文字を表す。
[0-9]は、数字1文字を表す。
+は、直前の正規表現の1回以上の繰返しであることを表す。
*は、直前の正規表現の0回以上の繰返しであることを表す。
選択肢
ア:456789
イ:ABC+99
ウ:ABC99*
エ:ABCDEF(正解)
🔒 解説は解答すると表示されます
大文字英字と数字の正規表現【午前解説】
正解の理由
正規表現 を分解すると次の通りです。
- :大文字英字(A〜Z)の1回以上の繰返し → 少なくとも1文字の大文字のみの連続。
- :数字(0〜9)の0回以上の繰返し → 数字が無くても良い、あれば連続する。
以上から、この正規表現に該当する文字列は「1文字以上の大文字英字で始まり、その後に任意の桁数の数字が続く(数字は無くても可)」ものです。
選択肢のうち、文字列が大文字英字のみで構成されておりかつ先頭が大文字であるのは エ の「ABCDEF」です。したがって正解は エ(ABCDEF)です。
解法ステップ
- 正規表現を左から読んで意味を把握する:(大文字1回以上)→ (数字0回以上)。
- 各選択肢の先頭文字種を確認する:先頭が大文字英字で始まっているかをまず判定する。
- 先頭が大文字であれば、残りが数字のみ(または空)であるかを確認する。
- 上記条件を満たす選択肢を正解とする。
選択肢別の誤答解説
- ア: 456789
- 先頭が数字であり の条件(先頭に少なくとも1文字の大文字)が満たされないため不適合です。
- イ: ABC+99
- 文字列に「+」が含まれているため、正規表現が期待する「大文字のみ→数字のみ」の形になっておらず不適合です。ここでの「+」は量指定子ではなく文字として現れているためマッチしません。
- ウ: ABC99*
- 末尾に「」がそのまま含まれているため不適合です。正規表現の は量指定子であり、文字列中の '' は許容されません。
- エ: ABCDEF
- 先頭から終わりまで大文字のみで構成されており、 を満たし、(数字0個)も許されるため条件に合致します。よって正解です(エ)。
よくある誤解
- 「+」や「」を文字として含む選択肢を正規表現の量指定子と混同してしまう。文字列内の「+」や「」は量指定子とは別物です。
- 数字が文字列の先頭に来てもマッチすると誤解する。 が先頭で必ず1文字以上の大文字が必要です。
- 小文字の英字や記号を大文字のクラスに含めて考えてしまう。 は大文字のみを指します。
補足コラム
- 問題文で や の意味が定義されているため、その定義に従って解釈します。実際の UNIX コマンド(例:grep、sed)の基本正規表現(BRE)と拡張正規表現(ERE)ではメタ文字の扱いが異なる場合がありますが、本問では定義に従ってください。
- は ASCII の大文字範囲を想定しています。ロケールや Unicode を扱う場面では別途注意が必要です。
- 実践問題では「先頭・末尾」の位置を明示するアンカー(^, $)が無い場合でも、選択肢全体がその正規表現に一致するかを確認するのが基本です。
FAQ
Q1: 空文字列はマッチしますか?
A1: いいえ。 が必須であるため、少なくとも1文字の大文字が必要です。空文字列は不適合です。
A1: いいえ。 が必須であるため、少なくとも1文字の大文字が必要です。空文字列は不適合です。
Q2: 小文字の "abc" はマッチしますか?
A2: いいえ。 は大文字のみを示すため小文字はマッチしません。
A2: いいえ。 は大文字のみを示すため小文字はマッチしません。
Q3: "ABC123" はマッチしますか?
A3: はい。先頭の "ABC" が を満たし、続く "123" が を満たすので一致します。
A3: はい。先頭の "ABC" が を満たし、続く "123" が を満たすので一致します。
Q4: 文字列に '+' や '' が含まれている場合はどう判定しますか?
A4: 文字列中の '+' や '' は量指定子ではなく単なる文字として扱われます。本問の正規表現はそれらの記号を許容していないため不一致になります。
A4: 文字列中の '+' や '' は量指定子ではなく単なる文字として扱われます。本問の正規表現はそれらの記号を許容していないため不一致になります。
関連キーワード: 正規表現、UNIX、メタ文字、文字クラス、量指定子、grep

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

