ワイルドカード

カテゴリー 文字列操作

ワイルドカード文字とその種類

ワイルドカード文字とは、「そこに何らかの文字が入る」ことを表す特別な文字。

普通の文字と組み合わせて使うことで、「Aから始まる文字列」「括弧で囲まれた文字列」など、文字列の形式を表現することができる。

任意の1文字

ワイルドカード文字?は、

  • どんな文字でもいいから「そこに1文字入る」

ことを表す。

任意の文字列

ワイルドカード文字*(アスタリスク)は、

  • どんな文字を含んでもいいから「そこに数文字入るかもしれない」

ことを表す。

*には1文字以上という制約がないため、空文字にもマッチすることに注意。

こんな文字列、どう表現する?

文字数が決まっている場合

どんな文字が入るかはわからないが、文字数が決まっている場合は、?を使うことで表現できる。

例:ハイフン区切り10桁の生年月日

"????-??-??"は、次のような文字列を表す。

  • "2000-04-13"
  • "1997-11-19"

ある文字で終わる文字列

終わりの文字は決まっているが、その前にどんな文字がくるかがわからない場合は、*を使う。

しかし、どんな文字かわからない部分に「最低何文字以上」といった制約を加えたい場合は、?も合わせて使う。

「県」と県名

"*県"は、次のような文字列を表す。

  • ""
  • "青森県"
  • "和歌山県"

*は空文字(0文字)も許容するため、ただの「県」も"*県"にマッチする。

「青森県」や「和歌山県」などにのみマッチさせたい場合は、"?*県"とすればよい。

?を加えることで、「県」の前が1文字以上であることを表現できる。

注意:アスタリスクの貪欲さ

"?*県"だとうまくいくが、"*?県"だとうまくいかないことに注意。

たとえば、「青森県」の場合、

  • "?*県"なら、?が「青」、*が「森」
  • "*?県"なら、*が「青森」、?に該当する文字なし

というように、何文字でもよい*を先に置いてしまうと、*が「県」の前のすべての文字を消化してしまい、?にマッチする文字がなくなってしまうのだ。