ITパスポート過去問 令和1年度(2019年)問99
ワイルドカードに関する次の記述中のa,bに入れる字句の適切な組合せはどれか。
任意の1文字を表す“?”と,長さゼロ以上の任意の文字列を表す“*”を使った文字列の検索について考える。aでは,“データ”を含む全ての文字列が該当する。また,bでは,“データ”で終わる全ての文字列が該当する。

選択肢
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
“データ”を含む条件は、前後に0文字以上の任意の文字列を許すため a は データ です。“データ”で終わる条件は、後ろ(末尾)を「データ」で固定し、前だけを0文字以上の任意の文字列にするため b は *データ です。したがって正しい組合せは「エ」です。
Point
この問題は、ワイルドカード「?」「*」の意味を正しく理解し、「文字列に含む」と「文字列の末尾が一致する」を検索パターンとして正しく表せるかを確認することがねらいです。
解くために必要な知識
この問題を解くには、ワイルドカード(?と*)を使った文字列検索の基本を理解している必要があります。
用語の整理
| 用語 | 意味 |
|---|---|
| ワイルドカード | 検索パターンで、任意の文字や文字列を表す記号の総称です。 |
| ? | 任意の1文字を表します。0文字は表せません。 |
| * | 長さ0以上の任意の文字列を表します。0文字も表せます。 |
パターンの作り方
「含む(部分一致)」の作り方
対象の語の前後に文字が付く可能性があるため、前後を * で許します。
-
例:データ
- 一致する例:「データ」「顧客データ」「データ一覧」
「〜で終わる(後方一致)」の作り方
末尾を固定し、先頭側だけを * で許します。
-
例:*データ
- 一致する例:「データ」「顧客データ」
- 一致しない例:「データ一覧」(末尾がデータではないため)
ひっかかりやすい点(? の扱い)
? は必ず1文字分を要求します。
- ?データ は「(任意の1文字)+データ」にしか一致しないため、「データ」単体には一致しません。
問題の解法手順
a(「データ」を含む)の作り方
手順1:ワイルドカードの意味を確認します
-
?:任意の1文字(0文字は不可)
-
*:長さ0以上の任意の文字列(0文字も可)
手順2:「“データ”を含む」をパターンにします(a)
「データ」の前後には、文字が付く場合も付かない場合もあります。
-
前:0文字以上を許す
-
後:0文字以上を許す
したがって a は データ です。
b(「データ」で終わる)の作り方
手順1:「“データ”で終わる」をパターンにします(b)
末尾は必ず「データ」で固定し、先頭側だけが可変です。
-
前:0文字以上を許す
-
後:許さない(末尾がデータで確定)
したがって b は *データ です。
手順2:選択肢を照合します
a が データ、b が *データ の組合せは「エ」です。
選択肢ごとの解説
- ア:不正解
aが「?データ*」なので、「データ」の前に必ず1文字が必要です。そのため「データベース」のように先頭から「データ」で始まる文字列がaに一致しません。bの「?データ」も同様に「データ」単体に一致しません。
- イ:不正解
b の データ は末尾が「データ」で固定されるため、「データ」で終わる条件を満たします。一方 a の ?データ は先頭に必ず1文字が必要なので、「データ」単体に一致せず、“データ”を含む全てを満たしません。
- ウ:不正解
a の データ は前後に0文字以上の任意の文字列を許すため、“データ”を含む条件を満たします。一方 b の ?データ は先頭に必ず1文字が必要なので、「データ」単体に一致せず、「データ」で終わる全てを満たしません。
- エ:正解
a の データ は「データ」の前後に0文字以上の任意の文字列を許すため、“データ”を含む全てに一致します。b の *データ は先頭側に0文字以上の任意の文字列を許し、末尾を「データ」で固定できるため、「データ」で終わる全てに一致します。
まとめ
“データ”を含む条件は、前後に0文字以上の任意の文字列を許すため a は データ です。“データ”で終わる条件は、後ろ(末尾)を「データ」で固定し、前だけを0文字以上の任意の文字列にするため b は *データ です。したがって正しい組合せは「エ」です。
テクノロジ系 > 基礎理論 > 基礎理論
aが「?データ*」なので、「データ」の前に必ず1文字が必要です。そのため「データベース」のように先頭から「データ」で始まる文字列がaに一致しません。bの「?データ」も同様に「データ」単体に一致しません。
b の データ は末尾が「データ」で固定されるため、「データ」で終わる条件を満たします。一方 a の ?データ は先頭に必ず1文字が必要なので、「データ」単体に一致せず、“データ”を含む全てを満たしません。
a の データ は前後に0文字以上の任意の文字列を許すため、“データ”を含む条件を満たします。一方 b の ?データ は先頭に必ず1文字が必要なので、「データ」単体に一致せず、「データ」で終わる全てを満たしません。
a の データ は「データ」の前後に0文字以上の任意の文字列を許すため、“データ”を含む全てに一致します。b の *データ は先頭側に0文字以上の任意の文字列を許し、末尾を「データ」で固定できるため、「データ」で終わる全てに一致します。