基本情報技術者試験「正規表現」の問題
正規表現 ab*c が表す文字列パターンの説明として最も適切なものはどれか。ここで * は直前の文字の0回以上の繰返しを表す。
アa と c の間に b がちょうど1個だけ入る文字列
イab という2文字の並びが全体として0回以上繰り返され、その後に c が1個付く文字列
ウa と b と c がこの順で各1個ずつ並ぶ文字列に限られる
エ先頭が a、末尾が c で、間に b が0個以上連続する文字列
正解
エ.先頭が a、末尾が c で、間に b が0個以上連続する文字列
* は直前の1文字bの0回以上の繰返しを表す。よってab*cは『a→b(0個以上)→c』の形で、ac・abc・abbc・abbbcなどにマッチする。間のbが0個以上連続するので正しい。
?選択肢ごとの解説
ア ×bがちょうど1個だけというのは誤りで、*は0回も含むためbが0個のac、複数個のabbcにもマッチする。
イ ×『ab』全体の繰返しと解釈しているが、*は直前の1文字bにのみ係るのであって部分文字列abには係らない。
ウ ×各1個ずつ(abcのみ)に限るのは誤りで、bの個数は0個でも複数個でもよい。
エ ○* は直前の1文字bの0回以上の繰返しを表す。よってab*cは『a→b(0個以上)→c』の形で、ac・abc・abbc・abbbcなどにマッチする。間のbが0個以上連続するので正しい。
✎くわしく
正規表現の * は『直前の1要素』に作用する量化子で、0回以上の繰返しを許す。グループ全体に係らせたい場合は(ab)*のように括弧でくくる必要がある。係る範囲の理解が誤読を防ぐ核心である。
✓本番での押さえどころ
試験のコツ
* は『直前の1文字を0回以上』。+は1回以上、?は0回か1回。係る範囲は括弧の有無で判断する。
覚え方
* は『直前の1個を好きなだけ(0個含む)コピー』と覚え、グループ化は括弧が要ると紐づける。
よくある誤り
*が直前1文字でなく直前の語全体に係ると誤読する、または*を1回以上(+の意味)と取り違える誤りが多い。
基礎理論の他の問題
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-a3-0092