SenseTalkパターン言語の要素
SenseTalkのパターン言語を使用すると、テキスト内の文字列と一致するパターンを定義できます。SenseTalkパターン言語の基礎で説明されているように、パターンマッチング機能は正規表現(regex)をベースに構築されています。SenseTalkパターン言語を使用すると、読みやすい構文でパターンを定義できます。
任意の3つの数字の出現のような単純なパターンのためのパターン定義を作成することもできます。また、任意の長さを持つことができ、オプションの部分や代替の部分を持つ複雑なパターンのためのパターンを定義することもできます。どんなに単純であれ複雑であれ、すべてのパターンは基本的なパターン要素から構成されています。
パターン言語の構文
SenseTalkパターン言語におけるパターン定義は、角括弧(< ... >)で囲まれたパターンの説明から成ります。
文法:
{pattern} < patternLanguageExpression >
pattern
という単語はパターン言語ではオプションで、通常は省略されます。
パターン定義 - 上記の構文で_patternLanguageExpression_によって表される - は、7桁の数字を探すための7 digits
のような単一の要素であることができます。しかし、ほとんどのパターンは、要素のシーケンス、または_subpatterns_を含みます。シーケンスは、各サブパターンをカンマで区切る、then
で区切る、または各要素を新しい行にリストアップすることで指定します(またはこれらのオプションの組み合わせ)。
したがって、以下の例はすべて、社会保障番号のパターン定義を表現する同等の方法です:
<3 digits, "-", 2 digits, "-", 4 digits> <3 digits then "-"
set ssn to <3 digits, "-", 2 digits, "-", 4 digits>
set ssn to <3 digits then "-"
2 digits, "-",
2 digits, "-",then 4 digits>
サブパターンで代替選択を指定するためにor
という単語を使用できます。例えば、
<"cat" or "cow">
は、cat
またはcow
のいずれかと一致します。
必要に応じて、要素をグループ化するために括弧を使用できます。例えば、
<"cat" or "cow" then 2 digits>
は、cat24
やcow17
のようなテキストと一致します。しかし、
<"cat" or ("cow" then 2 digits)>
は、cat
(数字は不要)またはcow97
のようなものと一致します。
パターン要素
パターン定義は、個々の要素、またはサブパターンから構成されます。要素は"cat"のような引用符で囲まれた文字列に含まれる文字であることができます。また、SenseTalk変数、括弧内の表現、または以下のパターン定義要素表で説明されているいくつかのパターン要素のいずれかであることもできます。
要素が定義できる方法については、以下を注意してください:
- ほとんどのパターン要素は単数または複数であることができます。
- 単数要素は、指定された値のうちの正確に1つと一致します。
- 複数要素は、指定された値の1つ以上の連続したものと一致します。
- 量詞を使用して、要素が一致させたい文字や値の数を明示的に制御できます。