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つ以上の連続したものと一致します。
- 量詞を使用して、要素が一致させたい文字や値の数を明示的に制御できます。
パターン定義要素
要素 | 定義 |
---|---|
"quoted string" | 正確な文字列を使用します |
variable | 変数に格納されている任意の有効な要素や要素の組み合わせを使用します |
expression | expression 文字列を生成する括弧内の任意のSenseTalk式を使用します |
character | |
パターンの例: () (w) ( ) (7) (.) ()) | 任意の文字に一致します |
letter letters | 任意のアルファベットの文字に一致します |
nonletter nonletters | アルファベットの文字以外の文字に一致します |
lowercase letter lowercase letters | 任意の言語の小文字に一致します |
nonlowercase letter nonlowercase letters | 任意の言語の小文字以外の文字に一致します |
一致するパターン例: (w) ( ) (7) (.) () | 任意の言語の大文字に一致します |
マッチしない:() (w) ( ) (7) (.) () (salamander) otherStuff | 任意の言語の大文字以外の文字に一致します |
digit digits | 0から9までの数字に一致します |
nondigit nondigits | 数字以外の文字に一致します |
数字以外の文字に一致します | |
letterOrDigit , alphanumeric lettersOrDigits , alphanumerics | |
nonLetterOrDigit , nonAlphanumeric nonLettersOrDigits , nonAlphanumerics | |
whitespace character whitespace characters | 空白文字(スペース、タブ、行区切りなど)に一致します |
nonwhitespace character nonwhitespace characters | |
word character word characters | 単語の文字(文字または数字)に一致します |
nonword character nonword characters | |
punctuation character punctuation characters | |
nonpunctuation character nonpunctuation characters | 句読点以外の文字に一致します |
Matches nonpunctuation characters | |
character [of | in | from] characterSet characters [of | in | from] characterSet | Matches characters that are in the characterSet (string, range, character class identifier, or list of these items) |
character not [of | in | from] characterSet characters not [of | in | from] characterSet | Matches characters that are not in the characterSet |
全てのケースでcharacter
をchar
、characters
をchars
と省略することができます。
量詞と要素
単数形のパターン要素、例えばletter
やdigit
を指定すると、そのタイプの要素が一つだけでパターンの一致が作成されます。複数形を指定すると、例えばletters
やdigits
、その要素が一つ以上あれば一致が作成されます。
また、要素がパターン一致を作成するために何回現れるべきかを指定するために使用できるいくつかの量詞があります。
次の説明では簡単さのためにcharacter
という用語を使用しますが、任意の要素用語を使用することができます。
正確に一つの文字を意味する用語
character
a character
one character
exactly one character
テックトーク
set myPattern to < "(" then a character then ")" >
以下のようなシーケンスにマッチします:
(w)
( )
(7)
(.)
(()
マッチしません:
()
(42)
(salamander)
otherStuff
正確な数の文字を意味する用語
2 characters
exactly 2 characters
これらの例では数値2が示されていますが、任意の正の整数が使用できます。値が整数の変数も使用できますが、この場合には"exactly"という言葉を使用しなければなりません。
例:
set myPattern to < "(" then 2 characters then ")" >
一致するパターン例: (42) (CO) (())
マッチしません:
()
(w)
( )
(7)
(.)
())
(salamander)
otherStuff
0または1文字を意味する用語
maybe character
maybe a character
maybe one character
zero or one character
zero or maybe one character
例:
set myPattern to < "(" then maybe a character then ")" >
以下のようなシーケンスにマッチします:
()
(w)
( )
(7)
(.)
マッチしません:
(42)
(salamander)
otherStuff
このパターンは() も一致することができますが、3つの文字すべてに一致する必要がある場合を除いて、() だけに一致することを優先します。
1文字以上を意味する用語
characters
some characters
one or more characters
例:
set myPattern to < "(" then characters then ")" >
以下のようなシーケンスにマッチします: (w)
( )
(7)
(.)
())
(42)
(salamander)
マッチしない:() otherStuff
以下の文下の例では、2つの文字列を一致します: (a woman)
と(her cat)
0文字以上を意味する用語
maybe characters
maybe some characters
zero or more characters
例:
set myPattern to < "(" then zero or more characters then ")" >
以下のようなシーケンスにマッチします: ()
(w)
( )
(7)
(.)
(42)
(salamander)
一致しない: () otherStuff
保存 をクリックして接続を保存します。新しいSingle System接続が接続リストで使用できるようになります。
このパターンは ())
も一致することができますが、3つの文字すべてに一致する必要がある場合を除いて、()
だけに一致することを優先します。
以下の文下の例では、2つの文字列を一致します: (a woman)
と(her cat)
最小文字数を指定する用語
at least 2 characters
2 or more characters
2 or maybe more characters
at least 2 or more characters
at least 2 and maybe more characters
これらの例では数値2が示されていますが、任意の正の整数が使用できます。特定の数値の代わりに整数の値を持つ変数も使用できます。
例:
set myPattern to < "(" then 2 or morecharacters then ")" >
以下のようなシーケンスにマッチします: (42)
(salamander)
マッチしません: ()
(w)
( )
(7)
(.)
())
otherStuff
以下の文下の例では、2つの文字列を一致します: (a woman)
と(her cat)
最小文字数と最大文字数を指定する用語
2 to 4 characters
from 2 to 4 characters
これらの例では範囲が2から4まで示されていますが、任意の範囲の正の整数が使用できます。値が整数の変数も、数値の代わりに使用できます。
例:
set myPattern to < "(" then 2 to 4 characters then ")" >