SenseTalkでパターンを使用する
SenseTalkパターン言語は、SenseTalkの自然言語構文でソーステキスト内のパターンを検索することができます。パターン言語の一般的な説明については、SenseTalkパターン言語の基礎を参照してください。パターンを定義する方法に関する完全な情報については、SenseTalkパターン言語の要素を参照してください。
以下に、SenseTalkスクリプトでパターンを使用する方法についての情報が記載されています。
パターンマッチングのためのオペレータ、コマンド、および関数
パターンは、大きな文字列内の特定のテキストの存在または位置を探すすべてのSenseTalkオペレータ、およびテキストを操作するコマンドや関数に対応しています。
set ssn to <3 digits then dash then 2 digits then dash then 4 digits>
put every offset of ssn in textblock into ssnList // Finds the offset (first character position) of all occurrences of ssn pattern match in textblock and places those positions into the ssnList list
以下のオペレータ、コマンド、および関数をパターン言語で使用できます。
contains
operatoris in
operatorbegins with
operatorends with
operatoroffset
,range
,every offset
,every range
functionsreplace
commanddelete
commandsplit
command,split by
functionnumber of occurrences of
function
さらに、パターンの使用に特化したオペレータと関数もあります。
Matches
オペレータ
matches
オペレータを使用して、変数または式がパターンと完全に一致するかどうかをテストします。オペランドの一つはパターンであり、もう一つは文字列値として扱われます。このオペレータは、パターンが文字列全体と完全に一致する場合にtrue
を返します。パタンが文字列の一部のみ、または全く一致しない場合、matches
オペレータの結果はfalse
となります。
例:
put 83 matches <digit,digit> --> True
put <"x", 3 chars, "y"> matches "xyzzy" --> True
パターンが全体の値と一致する可能性がある場合、matches
オペレータはtrue
を返します。たとえ、通常のパターンのマッチが全体の文字列を返さない場合でも(使用中の遅延量詞による):
put <"$", digits> matches "$895" --> True
put the occurrence of <"$", digits> in "$895" --> "$8"
遅延と貪欲なマッチおよび量詞についての情報は、**SenseTalkパターン言語の要素**を参照してください。
Match
およびEvery Match
関数
match
およびevery match
関数を使用して、テキスト内のパターンを特定します。match
関数は指定されたパターンの最初の出現を見つけ、every match
はソース内のパターンのすべての出現を見つけます。
match
関数がパターンに一致するものを見つけると、パターンによってはいくつかのプロパティを含むマッチプロパティリストを返します。基本的なパターンでは、プロパティリストには一致したテキストを示すtext
と、そのテキストが見つかった範囲を示すtext_range
が含まれます。
every match
関数は、プロパティリストのリストを返します。各プロパティリストは、match
関数と同じ情報を含みます。
例:
put the match of <3 digits> in "123456789" --> (text:"123", text_range:"1" to "3")
put every match of <3 digits> in "123456789" --> ((text:"123", text_range:"1" to "3"),(text:"456", text_range:"4" to "6"),(text:"789", text_range:"7" to "9"))
これらの関数についての詳細な情報については、**Pattern Matching Functions**を参照してください。
Occurrence
およびEvery Occurrence
関数
occurrence
およびevery occurrence
関数を使用して、定義されたパターンの一致するテキストを返します。occurrence
関数は最初に見つかった一致を返し、every occurrence
はソーステキスト内で見つかったすべての一致のリストを返します。
put the occurrence of <"(",chars,")"> in "sqrt(42)" --> "(42)"
put every occurrence of <3 digits> in "123456" --> (123,456)
これらの関数についての詳細な情報については、**Pattern Matching Functions**を参照してください。
パターン内の変数と式の使用
パターンを定義するときには、Pattern Elementsで説明されている要素を使用できます。ただし、時にはパターンが一つの使用から次の使用まで変化する要素を含まなければならないことがあります。
例えば、15-Aug-2018
の形式の日付に一致する簡単な日付パターンを考えてみてください。次のパターンはそのような日付を見つけます:
set datePattern to <1 or 2 digits, "-", 3 letters, "-", 4 digits>
しかし、すべての日付を見つけたいのではなく、スクリプトの別の場所で決定される特定の月の日付だけを見つけたいとします。この場所では、パターンのその要素の代わりに変数を使用することができます。パターンはランタイムでの変数の値を使用して構築されます:
set month to "Oct"
set datePattern to <1 or 2 digits, "-", month, "-", 4 digits>