# マッチ

ひまわりは、ワイルドカードを使った文字列のマッチングが使えます。

もちろん、ワイルドカードより高度な正規表現のマッチも使えますが、正規表現は、初心者にとっては複雑すぎて、なかなか分かりにくいと思います。しかし、ワイルドカードは、ルールが単純ですから、初心者にも難なく使いこなせるようになると思います。

マッチ

> さて、ワイルドカードとか、マッチングとか、カタカナを並べられても、イメージがつかみにくいと思いますので、この命令の簡単な使い方から見ていきましょう。

> ある日、私は、おじいさんに呼ばれました。

> おじいさん「おい、あれって、誰だっけ？」 私「え？あれじゃ、分からないよ。」 おじいさん「ううむ、誰じゃったかのぅ。この年になるとなぁ。確か、[松]なんとか[子]、っていう芸能人だけど、ううむ。なんだったかなぁ・・・」 私「あぁ、松たか子ね。」 おじいさん「違う、違う、そんな名前じゃなかった・・・。」 私「じゃ、誰？」

> こんな場合、お手上げですね。芸能人の専門家なら、一瞬で、５，６人の、[松]なんとか[子]を言えるのでしょうけど、私のような、めったにTVを見ないものは、さっぱり出てきません。でも、インターネット世代の申し子である僕らは、検索エンジンとひまわりがあれば、さっさと見つけることが出来ます。
> Googleで検索・・・
> Gooで検索・・・
> Yahooで検索・・・あ、出てきた。
> 「松下萌子 」「松嶋菜々子 」「松たか子 」「松田聖子 」・・・
> ここでは、簡単に名前が出てしまいましたが、うまく出なかったとしましょう。芸能人の名前一覧があって、その中から、[松]なんとか[子]を、ピックアップするプログラムを作ってみましょう。
> こんなとき使うのが、ワイルドカードを使った文字列マッチです。

> 「松浦亜弥 松崎ナオ 松澤由美 松田樹利亜 松田聖子 松任谷由実 松たか子 松井友香 松岡由樹 松坂紗良 松下萌子 松嶋菜々子 松田彩香 松田純」を、反復（ それを、「松*子」で、マッチ。 表示。 )。

> これを、実行すると、

> 松田聖子 松たか子 松下萌子 松嶋菜々子

> が、表示されます。
> おじいさんに、この中に目的の人物がいるか聞いてみましょう。

> 私「どう、この4人の中に居る？」 おじいさん「おお、そうじゃ。松田聖子じゃった。」 私「ふ〜ん、それで、松田聖子がどうしたの？」 おじいさん「今度ディナショーが見たいのなぁと思ってね。」 私「それは、忘れずに、見られるといいね・・・」

この小話から、ワイルドカードの使い方を理解して頂けたでしょうか？

このように、「松*子」のように書くと、"*"の文字で、「松田聖子」・「松たか子」・「松嶋奈々子」を、表すことが出来るのです。便利ですよね。

ひまわりのマッチ命令で使えるワイルドカードは、以下のとおりです。

> 記号 | 意味 | 使用例 | マッチする文字例
> * | 任意の文字（０文字のこともある） | *ス | イス、アイス、チョイス
> ? | 任意の一文字 | ?だ | 君だ、しだ、ひだ
> # | 任意の数字一文字 | 〒###-#### | 〒100-1234
> [str] | strに指定した文字のどれか一文字 | う[あ-ん]ぎ | うさぎ、うなぎ
> [!str] | strに指定した文字以外のどれか一文字 | ドラ[!あ-ん] | ドラム、ドライ
> [*str] | strに指定したいずれかの文字の繰り返し | お[*あ-ん]ん | おじさん、おじいさん、おばさん
> [=ab|cd] | abかcdのどちらかの文字列 | [=誕生|日曜]日 | 誕生日、日曜日

部分的なピックアップ

> 次に、ワイルドカードの指定したパターンの一部分だけを、ピックアップする機能を紹介します。これは、例えば、電話番号から市外局番だけを取り出したい時などに、威力を発揮します。

> 「tel:0532-41-0000」を、「tel:(*)-」で、マッチ。 （それ＃１）を、表示

> 上のように実行すると、「tel:0532-」までがマッチし、「それ＃１」には、( ) で括られた部分（愛知県豊橋市の市外局番）の、「0532」を表示します。（１つだけ取り出します。）
> また、下４桁だけを得たい場合は、以下のように書きます。

> 「tel:0532-41-0000」を、「*:*-*-(*)」で、マッチ。 （それ＃１）を、表示

ちょっとずつマッチ

> 『マッチ』命令は、指定文字列の頭から、パターン文字列分だけ読んで、残りは、指定文字列へと返します。

> メニューは、「ラーメン、うどん、カレー」 メニューを、「*、」で、マッチ。 それを、表示。 メニューを、表示。’残りの文字列を表示

戻る