跳到正文

平成23年度 秋期 ITパスポート試験 問73

这道题的解析和你的作答记录。

問73
頻出度★★☆

ワイルドカードの“%”が 0 個以上の連続した任意の文字列を表し,“_”が任意の 1 文字を表すとき,文字列全体が“%イ%ン_”に一致するものはどれか。

出典 平成23年度 秋期 ITパスポート試験 問73
解説

問 73

  • ア

    正解 正确答案是ア。首先准确解读模式“%イ%ン_”的含义。“%”表示 0 个或多个连续的任意字符串,所以可以一个字符都没有,也可以有任意多个字符。“_”表示任意 1 个字符,所以必须正好对应 1 个字符(0 个字符不行)。而且本题要求的是整个字符串相匹配,因此模式必须从头到尾把字符串完全覆盖。把这些条件合起来,匹配字符串的条件可以分解为以下三条:(1) 字符串中的某处有“イ”。(2) 在该“イ”之后有“ン”。(3) 在该“ン”之后恰好剩下 1 个字符,也就是倒数第 2 个字符是“ン”。ア「アクセスポイント(接入点)」共 8 个字符,依次为 ア・ク・セ・ス・ポ・イ・ン・ト。第 6 个字符是“イ”,第 7 个是“ン”,第 8 个是“ト”,因此把开头的“%”对应“アクセスポ”、把“イ”对应第 6 个字符“イ”、把第二个“%”对应空字符串(0 个字符也可以)、把“ン”对应第 7 个字符“ン”、把最后的“_”对应第 8 个字符“ト”,模式就恰好覆盖了整个字符串。所以只有ア匹配。在实际工作中,这类模式匹配正是 SQL 的 LIKE 谓词做字符串检索、以及筛选文件名时日常使用的思路。解题诀窍是先从末尾一侧的固定部分开始确认:本题只要先看“倒数第 2 个字符是不是ン”,就能立刻排除イ和ウ,然后再对剩下的候选确认“那个ン之前是否有イ”即可。

  • 错误イ

    「イベントドリブン(事件驱动)」共 8 个字符,依次为 イ・ベ・ン・ト・ド・リ・ブ・ン。模式末尾的“_”必须正好对应 1 个字符,因此“ン”之后必须还剩下 1 个字符,但这个字符串以“ン”结尾,第 8 个字符“ン”之后一个字符也不剩。若改用第 3 个字符的“ン”,其后就会剩下“トドリブン”这 5 个字符,而只能接收 1 个字符的“_”无法覆盖它们。这里的关键在于末尾没有“%”,并不是开头有“イ”就能匹配。因此不匹配。

  • 错误ウ

    「クライアントサーバ(客户端/服务器)」共 9 个字符,依次为 ク・ラ・イ・ア・ン・ト・サ・ー・バ。第 3 个字符是“イ”,第 5 个字符是“ン”,虽然满足了“イ”在“ン”之前这个条件,但那个“ン”之后还剩下“トサーバ”这 4 个字符。“_”是任意 1 个字符,而不是任意字符串,无法一并接收 4 个字符。看倒数第 2 个字符是“ー”而不是“ン”,在这一步就能判定条件不成立。这是一个一旦弄混“_”和“%”的作用就容易误选的选项。

  • 错误エ

    「リバースエンジニアリング(逆向工程)」共 12 个字符,依次为 リ・バ・ー・ス・エ・ン・ジ・ニ・ア・リ・ン・グ。倒数第 2 个字符正是第 11 个字符“ン”,其后还剩下“グ”这 1 个字符,因此模式后半部分的“ン_”确实是满足的。但是这个字符串中一个“イ”字符也没有。第 8 个字符“ニ”只是字形相似的另一个字符,而不是通配符的“イ”必须与该字符本身相匹配,所以不能替代。既然无法满足模式前半部分的“イ”,整体上就不匹配。

ここがポイント
  • 通配符的作用差异 —— “%”对应 0 个或多个连续的任意字符串,所以长度为 0 也可以;而“_”是任意 1 个字符,必须正好消耗 1 个字符。是“可以 0 个字符”还是“必须 1 个字符”,这一差别决定了正误。这正是 SQL 的 LIKE 谓词所用的写法,相当于文件名检索中的“*”和“?”。
  • 整体匹配模式的分解方法 —— 要求整个字符串匹配时,模式必须从头到尾把字符串覆盖完。对于“%イ%ン_”,可以分解为「某处有イ」「其后有ン」「倒数第 2 个字符是ン」这三个条件;先从末尾的固定部分开始比对,就能高效地缩小候选范围。
用語
解答問73ア
练这一题

作答记录