|
2.8.3 文字列パターン
標準的な等号関係式 == を使い2つの文字列s_1とs_2が内容的に等しいかどうか判定できる.また,場合によっては,特定の文字列があるパターンにマッチするかどうかを調べたいときがある.
Mathematicaでは,ある文字が特殊な「メタキャラクタ」と翻訳されるような文字列からなる文字列パターンを定義できる.そして,関数StringMatchQを使って特定の文字列が定義された文字列パターンにマッチするかどうか調べられる. なお,式の検索等で使うパターンとは本質的に違うので注意すること(パターンの詳細は2.3を参照のこと).

文字列の照合
文字列パターンで使う特殊記号を見てみよう.複数のアルファベットおよび数字の並びには半角のアスタリスク(*)からなるメタキャラクタを使う.使い方としては,"a*b"とすれば,aで始まりbで終 る.その間は何でもよい文字列が検索できる.また,"a*b*"とすれば,aで始まり,その先は少なくとも1つbを含む文字列となる.
パターンマッチングを使ってみる.
In[1]:= StringMatchQ["aaaaabbbbcccbbb", "a*b*"]
Out[1]= 
アスタリスクの使い方は多くのオペレーティングシステムにおけるファイル名の検索で使うアスタリスクの使い方に似ている.Mathematicaではアスタリスクの他にも文字列のパターンを検索するためのメタキャラクタが用意されており,それらを使い異なったクラスのMathematicaのシンボル名を検索することができるようになっている.

文字列パターンで使うメタキャラクタ
Mathematicaでは,大文字で始まる名前は組込みの名前とし,ユーザ定義のものは小文字で始めるという一般的な規約がある.これを守って記述していれば,メタキャラクタであるアット記号@を使って文字列パターンを構成しておくことで,検索対象から組込み型の名前を除外できる.

条件付き文字列照合
この例の文字列はもちろんマッチしない.
In[2]:= StringMatchQ["platypus", "paltypus"]
Out[2]= 
スペルチェックを有効にしておく.すると,今度は,同じものであると答が返ってくる.
In[3]:= StringMatchQ["platypus", "paltypus", SpellingCorrection -> True]
Out[3]= 
大文字と小文字の区別をしないよう指定したので,マッチする.
In[4]:= StringMatchQ["AAaaBBbb", "a*b*", IgnoreCase -> True]
Out[4]= 
|