平成28年度 春期 午前 問3
情報に関する理論
正規表現に関する問題
UNIX における正規表現 [A−Z] + [0−9] * が表現する文字列の集合の要素となるものはどれか。ここで,正規表現は次の規則に従う。
- [A−Z] は,大文字の英字 1 文字を表す。
- [0−9] は,数字 1 文字を表す。
- +は,直前の正規表現の 1 回以上の繰返しであることを表す。
- *は,直前の正規表現の 0 回以上の繰返しであることを表す。
- ア456789
- イABC+99
- ウABC99*
- エABCDEF
答えと解説を見る
✓ これが正解エABCDEF
解説
大文字6文字+数字0文字なので正規表現に合います。
正規表現の中でプラス記号やアスタリスクは、直前の要素の繰返しを表す特別な記号として働きます。プラス記号は1回以上の繰返し、アスタリスクは0回以上の繰返しを指します。設問の正規表現は大文字を1回以上並べたあとに、数字を0回以上並べたものです。ここで注意が必要なのは、アスタリスクが0回以上を許すという点で、数字の部分は空でもよい形になります。判定の軸は、頭に大文字が1つ以上並んでいて、そのあとに数字だけがある、または何も無いかどうかです。プラス記号やアスタリスク自体が文字として現れることは、この正規表現では表現されておらず、それらを含む文字列はもとの集合の要素にはなりません。ここで扱っているのはメタ文字を持つ正規表現による集合の定義です。
ほかの選択肢はなぜ違うのか
- ア456789:先頭から数字だけが並ぶ文字列を挙げています。しかし正規表現の先頭では大文字が1回以上必要と定められているため、大文字が1つも無い時点で条件から外れます。数字だけの文字列はもとの集合には入りませんでした。
- イABC+99:大文字の後にプラス記号と数字が混在する文字列を挙げています。ここでのプラス記号は文字として現れていますが、設問の正規表現には文字としてのプラス記号を許す部分がありません。したがってこの並びは集合の要素になりませんでした。
- ウABC99*:大文字と数字の後にアスタリスクが末尾に付いた文字列を挙げています。設問の正規表現にはアスタリスク自体を文字として並べる指示は無く、末尾の記号を含む形は許されません。集合の要素として認められませんでした。
出典:平成28年度 春期 基本情報技術者試験 午前 問3
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)