SenseTalkのパターン言語の基本
SenseTalkには、スクリプト内のテキストを検索するための複数の方法が存在します。 テキスト比較演算子とテキスト演算子を使用して、特定の文字やより大きなテキスト文字列内の従属文字列の存在または位置をチェックできます。 SenseTalkのチャンク式は、行、語句、区切りアイテム、および個々の文字の利用により、テキスト検索を行いやすくします。
ただし、特定の文字列の検出だけでは不十分な場合があります。 例として、電話番号を知らずにテキスト内の電話番号を探し出さなければならない場合などが挙げられます。 あるいは、クレジットカード番号や社会保障番号などの機密情報が漏洩していないかどうかを判断しなければならない場合もあります。
これらのタスクの実行には、テキスト内のパターンを認識する能力を必要とします。 SenseTalkのスクリプトは、パターンを定義するための以下の2つの方法をサポートしています。
- SenseTalkのパターン言語:これにより、SenseTalkスタイルの自然言語を使用してパターンを定義できます。
- 正規表現(regex):これにより、regex定義を直接使用できます。
パターン言語の使用は一般的に、SenseTalkのスクリプティングにおいてパターンマッチングを利用する最も自然な方法です。 ただし、正規表現を熟知している場合やその他のプロジェクトのregex定義を既に保有している場合は、それらをSenseTalkコードと併用できます。
SenseTalkのパターン言語
SenseTalkのパターン言語を用いてパターンを描写することで、テキスト内を検索できます。 パターンは、要素を組み合わせて作成でき、ユーザーが検索したいことを描写するのに必要なだけ簡潔/複雑にすることができます。 SenseTalkのパターン言語では、パターンの説明は山括弧(< ... >)で囲まれます。
例えば、パターンマッチングを使用して社会保障ID番号を検索することができます。 社会保障番号は9桁で構成され、常に999-99-9999の形式で表記されます。すなわち、3桁の数字の後にダッシュ、その後2桁の数字とダッシュ、そして最後に4桁の数字が続きます。 SenseTalkにおいて、このパターンを記述する方法の一例は以下のようになります。
<3 digits then dash then 2 digits then dash then 4 digits>
ただし、SenseTalkには柔軟性があります。 パターンを構成する要素は、コンマで区切った各要素または単語thenで区切った各要素を続けて列記するか、各要素を新しい行に列記して区切って(またはこれらのオプションの組み合わせで)指定できます。 したがって、以下の例はすべて等価となります。
<3 digits then "-", 2 digits then "-", 4 digits>
<3 digits, "-", 2 digits, "-", 4 digits>
<3 digits then "-"
2 digits, "-",
then 4 digits>
後で再度利用する際に便利なように、変数にパターンを割り当てることができます。
set ssn to <3 digits then dash then 2 digits then dash then 4 digits>
SenseTalkにおけるRegex
regexは、検索パターンを定義する文字の特殊シーケンスです。 regexがパターンマッチング向けの多くのプログラミング言語でよく使用される一方で、regex構文は複雑で理解が難しく、導入が困難な場合があります。 いくつかの基本的なregexの使用を除き、記述されたパターンは、それを記述した当人にとってさえも解読が難しい場合もあります。
regex定義の作成に慣れている場合は、SenseTalk内にその構文を取り込むことができます。 単語patternの後に二重引用符で囲んだregex文字列または式を使用して、SenseTalkスクリプトにregexパターンを含めることができます。 例えば、US郵便番号コード向けのregexパターンは、SenseTalkにおいて以下のように記述できます。
pattern "\d{5}(?:-\d{4})?"
また、再度利用するときのために、変数にregexパターンを格納することもできます。
set zipcode to pattern {{
\d{5}(?:-\d{4})?
}}
SenseTalkのパターン言語におけるUS郵便番号コード用のパターンは、以下のように記述できることにも注意が必要です。
set zipcode to < 5 digits then preferably ("-" , 4 digits)>
次の手順
パターン言語は、ソーステキストに対してダイナミックマッチを作成するためのパワフルな方法を提供します。 スクリプト内におけるパターンの構築とパターンマッチングの実施に関する詳細情報は、以下を参照してください。