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 | 文字列を生成する括弧内の任意のSenseTalk式を使用します |
letter letters | 任意のアルファベットの文字に一致しす |
nonletter nonletters | アルファベットの文字以外の文字に一致します |
lowercase letter lowercase letters | 任意の言語の小文字に一致します |
nonlowercase letter nonlowercase letters | 任意の言語の小文字以外の文字に一致します |
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 | 句読点以外の文字に一致します |
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
保存 をクリックして接続を保存します。新しい単一システム接続が接続リストで使用できるようになります。
このパターンは())) も一致することができますが、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 ")" >
一致するパターン例: (42)
マッチしません: ()
(w)
( )
(7)
(.)
())
(salamander)
otherStuff
Lazy vs. Greedy Quantifiers
ある数値の範囲にマッチするパターンを作成するとき、マッチは lazy
または greedy
になります。lazyサブパターンは全体のパターンにマッチする最小限の回数をマッチします。greedyサブパターンは可能な限り多くの回数をマッチします。
SenseTalkでは、パターンマッチングはデフォルトでlazyです。したがって、以下のパターン
< "(" , characters , ")" >
最初に出現する ')' を含む、一つ以上の文字で始まる '(' と一致するシーケンスをマッチします。パターンは
< "(" , lots of characters , ")" >
一方、ソーステキスト中の最終的な ')' を含む、できるだけ多くの文字を貪欲に消費する '(' で始まるシーケンスをマッチします。
例文
その違いを示すために、この例文を考えてみてください:
Amy (a woman) and Flossie (her cat) lie down to take a nap.
そして、このパターン:
< "(" then one or more characters then ")" >
例文が変数 myText
に読み込まれていると仮定して、次のコードは二つの値を返します:
set myPattern to < "(" then one or more characters then ")" >
put every occurrence of myPattern in myText into myList
put mylist
出力: ((a woman),(her cat))
このように機能するのは、SenseTalkの one or more characters
が lazy — パターンを満たすために必要な最小限の文字を消費するためです。
しかし、場合によっては greedy マッチを作成する必要があります。この例では、以下のようにパターンを変更することで貪欲な挙動を実現できます:
< "(" then one or preferably more characters then ")" >
可能な場合はパターンがより多くの文字に一致することを指定すると 、every occurrence of myPattern in myText
の表現は、最初の '(' から最後の ')' までの全てを含む一つの値を返すようになります:
(a woman) and Flossie (her cat)
0または1文字を意味し、できれば1文字を好む項目
preferably character
preferably a character
preferably one character
zero or preferably one character
例:
set myPattern to < "(" then preferably a character then ")" >
以下のようなシーケンスにマッチします: ()
(w)
( )
(7)
(.)
())
マッチしません: (42)
(salamander)
otherStuff
保存 をクリックして接続を保存します。新しい単一システム接続が接続リストで使用できるようになります。
パターンが (())) に遭遇すると、後半のパターンを満たすために2番目の ')' が必要な状況でない限り、すべての3文字に貪欲にマッチします。そうでなければ () のみにマッチします。
1つ以上の文字を意味し、可能な限り多くを好む項目:
lots of characters
preferably lots of characters
one orlots of characters
one or preferably lots of characters
one or preferably more characters
例:
set myPattern to < "(" then lots of characters then ")" >
以下のようなシーケンスにマッチします: (w)
( )
(7)
(.)
())
(42)
(salamander)
マッチしない:() (w) ( ) (7) (.) ()) otherStuff
上述の文(例)では、次の一つの文字列に一致します:(a woman) and Flossie (her cat)
0文字以上を意味し、可能な限り多くを好む項目
preferably characters
maybe lots of characters
zero or lots of characters
zero or preferably lots of characters
zero or preferably more characters
例:
set myPattern to < "(" then zero or preferably more characters then ")" >
以下のようなシーケンスにマッチします: ()
(w)
( )
(7)
(.)
())
(42)
(salamander)
一致しない: otherStuff
検索が (())) に遭遇すると、このパターンは2番目の ')' が後半のパターンを満たすために必要な状況でない限り、すべての3文字に貪欲にマッチします。そうでなければ () のみにマッチします。
上述の文(例)では、次の一つの文字列に一致します:(a woman) and Flossie (her cat)
最小限の文字数を指定し、可能な限り多くを好む項目
少なくとも2文字、できれば多くの文字
2文字または多くの文字
2文字、できれば多くの文字
2文字、できれば多くの文字
少なくとも2文字、できれば多くの文字
少なくとも2文字、できれば多くの文字
これらの例では2という数字が示されていますが、任意の正の整数を使用することができます。
例:
set myPattern to < "(" then 2 or preferably more characters then ")" >
以下のようなシーケンスにマッチします: (42)
(salamander)
マッチしません: ()
(w)
( )
(7)
(.)
())
otherStuff
上述の文(例)では、以下に一致します:(a woman) and Flossie (her cat)
最小限と最大限の文字数を指定し、可能な限り多くを好む項目
2から4文字、できるだけ貪欲に
2から4文字、できるだけ貪欲に
これらの例では、2から4という範囲が示されていますが、任意の範囲の正の整数を使用することができます。
例:
set myPattern to < "(" then from 2 to 4 characters greedily then ")" >
一致するパターン例: (42) (salamander)
マッチしません: ()
(w)
( )
(7)
(.)
())
(salamander)
otherStuff
貪欲な振る舞いまたは怠惰な振る舞いを強制する
任意の文字数を表す項目の後にgreedily
またはlazily
という項目を使用することで、貪欲な振る舞いまたは怠惰な振る舞いを明示的に強制することができます。これらの項目が使用されると、常に優先され、前の項目の通常の振る舞いに関係なく優先されます。
以下にいくつかの例を示します:
maybe a character greedily -- ゼロまたは一つ、だけど一つを好む
some characters greedily -- 一つ以上、だけどできるだけ多くを好む
lots of characters greedily -- 一つ以上、だけどできるだけ多くを好む(通常の振る舞いを明示したもの)
lots of characters lazily -- 一つ以上、だけどできるだけ少なくを好む(通常の振る舞う(通常の振る舞いをオーバーライド)
貪欲な同義語
指定する際にこれらの用語は互換性があります:
lots
, lots of
, many
, max
, maximum
, the maximum number of
, the most
マッチするパターンの例:(42)
SenseTalkのテキスト比較は通常、ケースセンシティブではない、と[Expressions](/studio/ja/23.3/stk-expressions#case-sense)で説明されています。この振る舞いはパターンマッチにも適用されます。したがって、あなたのパターンが文字を探すとき、大文字でも小文字でもマッチします。ケースセンシティビティを必要とするデフォルトの振る舞いを[the caseSensitive
local property](/studio/ja/23.3/stk-global-properties-values#casesensitive)を使用して変更することができます。
ほとんどの比較演算子は、演算子のオプションとして直接指定することでケースセンシティビティを許可することもできますが、これはグローバル設定を上書きします。これらのオプションは、パターン比較だけでなく、通常のテキスト比較にも適用されます。以下の例で示します:
put <3 chars from "ABCDEF"> matches "fab" --> True
put <3 chars from "ABCDEF"> matches "fab" case sensitive --> False
パターン内のケースセンシティビティ設定
ケースセンシティビティの設定をパターン定義に直接組み込むことができます。これらのインライン設定は、常にデフォルトの設定やコマンドで指定されたオプションに優先します。パターン内でこれらのオプションを含めることで、パターンの異なる部分でのケースセンシティビティを細かく制御することができます。以上就是所有的翻译内容。如需继续,请提供更多的内容。
大文字小文字の区別要素の構文:
case sensitive -- パターンの後続のすべての要素は大文字と小文字を区別する必要があります
case insensitive -- パターンの後続のすべての要素は大文字と小文字を区別しない
case sensitive: element -- 指定された要素は大文字と小文字を区別する必要があります
case insensitive: element -- 指定された要素は大文字と小文字を区別しない
case sensitive: ( subPattern ) -- 指定されたサブパターンは大文字と小文字を区別する必要があります
case insensitive: ( subPattern ) -- 指定されたサブパターンは大文字と小文字を区別しない
case sensitive
が表示されている場所では、その同義語を使用することができます: case-sensitive
またはcaseSensitive
またはconsidering case
またはwith case
。
case insensitive
が表示されている場所では、その同義語を使用することができます: case-insensitive
またはcaseInsensitive
またはignoring case
またはwithout case
。
例:
put "abc" matches <case sensitive, 3 chars from "DCBA"> --> False
例:
set partNum to <"ABC", digit, case-sensitive: char in "JQXZ", digit>
put partNum matches "Abc9Q2" --> True ("ABC"は大文字と小文字を区別しない)
put partNum matches "ABC7x3" --> False ("x"は大文字になっていない)
例:
set code to <with case, character of "ABC", ignoring case, character of "XYZ">
put "aZ" matches code --> False ("a"はマッチするために大文字でなければならない)
put "Bx" matches code --> True ("x"は大文字または小文字であることができる)
大文字小文字の区別指示子は、存在する場合、実質的にはパターン定義自体の一部ではなく、むしろそれが適用される全体の定義に影響を与えます。したがって、大文字小文字の区別値を指定すると、ソーステキストからパターンのマッチングのための文字を消費しない。