SenseTalk パターン言語の基礎
SenseTalkはスクリプト内のテキストを検索するためのいくつかの方法を提供します。特定の文字や部分文字列が大きなテキスト文字列内に存在するか、位置を確認するためにtext comparison operatorsやtext operatorsを使用できます。SenseTalk のchunk expressionsは、行、単語、区切られた項目、個別の文字を使用してテキストを検索することを便利にします。
しかし、特定の文字列を見つけるだけでは十分ではない場合もあります。たとえば、電話番号が何であるか知らずにテキスト内に電話番号を見つける必要があるかもしれません。または、クレジットカード番号やソーシャルセキュリティ番号などの機密情報が公開されているかどうかを判断する必要があるかもしれません。
これらのタスクはテキスト内のパターンを認識する能力を必要とします。SenseTalkスクリプトはパターンを定義するための2つの方法をサポートしています:
- SenseTalkのパターン言語: SenseTalkスタイルの自然言語を使用してパターンを定義できます。
- 正規表現(regex): 正規表現の定義を直接使用できます。
パターン言語は通常、SenseTalkスクリプティングでパターンマッチングを使用する最も自然な方法です。しかし、正規表現に精通している、または他のプロジェクトから正規表現の定義をすでに持っている場合は、SenseTalkコードでそれらを使用でき るはずです。
SenseTalkのパターン認識機能は、パターン言語と正規表現の両方に対して、国際コンポーネントfor Unicode(ICU)の正規表現エンジンに基づいています。他のバージョンの正規表現は、それらがICUエンジンと互換性がある範囲で動作するはずです。詳細については、ICU User Guideをご覧ください。
SenseTalkのパターン言語
SenseTalkのパターン言語は、パターンを記述することでテキスト内を検索することができます。パターンは要素の組み合わせで、探したいものを記述するために必要なだけ単純または複雑にすることができます。SenseTalkのパターン言語では、パターンの記述は角括弧 (< ... >) で囲まれます。
例として、パターンマッチングを使用してソーシャルセキュリテ ィ識別番号を探すことができます。ソーシャルセキュリティ番号は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の用途を除いて、書かれたパターンは解読が難しいことがあります、それが作者である人物でさえも。
正規表現の定義作成に慣れている場合、その構文をSenseTalkに組み込むことができます。SenseTalkのスクリプトに正規表現パターンを含めるには、pattern
という単語の後にダブルクォートで囲まれた正規表現文字列または式を使用します。たとえば、米国の郵便番号のための正規表現パターンはSenseTalkで次のように書くことができます:
pattern "\d{5}(?:-\d{4})?"
また、再利用のために正規表現パターンを変数に格納することもできます:
set zipcode to pattern {{
\d{5}(?:-\d{4})?
}}
なお、SenseTalkのパターン言語での米国の郵便番号のパターンは次のようになります:
set zipcode to < 5 digits then preferably ("-" , 4 digits)>
次のステップ
パターン言語は、ソーステキストに対して動的なマッチングを作成する強力な方 法を提供します。パターンの作成とスクリプトでのパターンマッチングの実装についての詳細情報は、以下を参照してください: