ひまわりは、ワイルドカードを使った文字列のマッチングが使えます。
もちろん、ワイルドカードより高度な正規表現のマッチも使えますが、正規表現は、初心者にとっては複雑すぎて、なかなか分かりにくいと思います。しかし、ワイルドカードは、ルールが単純ですから、初心者にも難なく使いこなせるようになると思います。
マッチ
さて、ワイルドカードとか、マッチングとか、カタカナを並べられても、イメージがつかみにくいと思いますので、この命令の簡単な使い方から見ていきましょう。
ある日、私は、おじいさんに呼ばれました。
おじいさん 「おい、あれって、誰だっけ?」
私「え?あれじゃ、分からないよ。」
おじいさん「ううむ、誰じゃったかのぅ。この年になるとなぁ。確か、[松]なんとか[子]、っていう芸能人だけど、ううむ。なんだったかなぁ・・・」
私「あぁ、松たか子ね。」
おじいさん「違う、違う、そんな名前じゃなかった・・・。」
私「じゃ、誰?」
こんな場合、お手上げですね。芸能人の専門家なら、一瞬で、5,6人の、[松]なんとか[子]を言えるのでしょうけど、私のような、めったにTVを見ないものは、さっぱり出てきません。でも、インターネット世代の申し子である僕らは、検索エンジンとひまわりがあれば、さっさと見つけることが出来ます。
Googleで検索・・・
Gooで検索・・・
Yahooで検索・・・あ、出てきた。
「松下萌子 」「松嶋菜々子 」「松たか子 」「松田聖子 」・・・
ここでは、簡単に名前が出てしまいましたが、うまく出なかったとしましょう。芸能人の名前一覧があって、その中から、[松]なんとか[子]を、ピックアップするプログラムを作ってみましょう。
こんなとき使うのが、ワイルドカードを使った文字列マッチです。
これを、実行すると、
「松浦亜弥
松崎ナオ
松澤由美
松田樹利亜
松田聖子
松任谷由実
松たか子
松井友香
松岡由樹
松坂紗良
松下萌子
松嶋菜々子
松田彩香
松田純」を、反復(
それを、「松*子」で、マッチ。
表示。
)。
が、表示されます。
松田聖子
松たか子
松下萌子
松嶋菜々子
おじいさんに、この中に目的の人物がいるか聞いてみましょう。
私 「どう、この4人の中に居る?」
おじいさん「おお、そうじゃ。松田聖子じゃった。」
私「ふ〜ん、それで、松田聖子がどうしたの?」
おじいさん「今度ディナショーが見たいのなぁと思ってね。」
私「それは、忘れずに、見られるといいね・・・」
この小話から、ワイルドカードの使い方を理解して頂けたでしょうか?
このように、「松*子」のように書くと、"*"の文字で、「松田聖子」・「松たか子」・「松嶋奈々子」を、表すことが出来るのです。便利ですよね。
ひまわりのマッチ命令で使えるワイルドカードは、以下のとおりです。
記号 意味 使用例 マッチする文字例 * 任意の文字(0文字のこともある) *ス イス、アイス、チョイス ? 任意の一文字 ?だ 君だ、しだ、ひだ # 任意の数字一文字 〒###-#### 〒100-1234 [str] strに指定した文字のどれか一文字 う[あ-ん]ぎ うさぎ、うなぎ [!str] strに指定した文字以外のどれか一文字 ドラ[!あ-ん] ドラム、ドライ [*str] strに指定したいずれかの文字の繰り返し お[*あ-ん]ん おじさん、おじいさん、おばさん [=ab|cd] abかcdのどちらかの文字列 [=誕生|日曜]日 誕生日、日曜日
部分的なピックアップ
次に、ワイルドカードの指定したパターンの一部分だけを、ピックアップする機能を紹介します。これは、例えば、電話番号から市外局番だけを取り出したい時などに、威力を発揮します。
上のように実行すると、「tel:0532-」までがマッチし、「それ#1」には、( ) で括られた部分(愛知県豊橋市の市外局番)の、「0532」を表示します。(1つだけ取り出します。)
「tel:0532-41-0000」を、「tel:(*)-」で、マッチ。
(それ#1)を、表示
また、下4桁だけを得たい場合は、以下のように書きます。
「tel:0532-41-0000」を、「*:*-*-(*)」で、マッチ。
(それ#1)を、表示
ちょっとずつマッチ
『マッチ』命令は、指定文字列の頭から、パターン文字列分だけ読んで、残りは、指定文字列へと返します。
メニューは、「ラーメン、うどん、カレー」
メニューを、「*、」で、マッチ。
それを、表示。
メニューを、表示。’残りの文字列を表示