
出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」
正規表現 (a*(ab)*|c)*ad* で表すことができる文字列として、最も不適切なもの(マッチしないもの)を選ぶ問題。記号*は0回以上の繰り返し、|は選択を表す。
正規表現 (a*(ab)*|c)*ad* にマッチしない文字列を選ぶ問題。
① (a*(ab)*|c)*ad* は「a・b・cの並び」+「a」+「dの並び」。dは最後のadの後ろにしか出てこない
② dが途中にあり、その後にまた別の文字が続くものを探す。③aabcadadは1つ目のdの後ろにadが続く
③ ③
正規表現は、「a*(ab)*」又は「c」を0回以上繰り返した後に、「a」と、0個以上の「d」が続く形である。繰り返しの中の要素には文字dが含まれないため、最後の「a」より前にdがあってはならず、dは末尾の「ad*」の部分にのみ現れる。③aabcadad は、aab(=a+ab)、c までは繰り返し部分で表せるが、その後の「ad」の後にさらに「ad」が続いており、最後の「a」より前にdが現れるため、この正規表現では表せない。したがって③が最も不適切である。
正規表現では、*(0回以上の繰り返し)、|(選択)、連接に従って文字列を分解して確認する。この式では、dは末尾の ad* の部分でしか現れない。
キーワード: 正規表現、文字列照合、オートマトン、繰り返しと選択、情報工学部門