パターンマッチ表現の作成方法と使用方法の詳細については、『スクリプトガイド』のパターンマッチを参照してください。
Pat Abort()
説明
パターンマッチを即座に終了するパターンを生成する。バックアップも再試行も行いません。条件の割り当ては行われません。すでに行われた即座の割り当てが維持されます。
戻り値
マッチが終了したときは0
引数
なし
Pat Altern(pattern1, <pattern 2, ...>)
説明
パターン引数のいずれかにマッチするパターンを生成する。
戻り値
パターン
引数
1つ以上のパターン。
Pat Any("string")
説明
引数のいずれか1文字にマッチするパターンを生成する。
戻り値
パターン
引数
string
文字列
Pat Arb()
説明
任意の文字列にマッチするパターンを生成する。始めはヌル文字列とマッチします。バックアップが行われるたびにマッチする文字列が1文字ずつ長くなります。
戻り値
パターン
引数
なし
例
p = "最後ではなく" + Pat Arb() >? stuffInTheMiddle + "出てきます";
Pat Match( "ストーリーの最後ではなく始めの方で、3匹のクマが出てきます", p );
Show( stuffInTheMiddle );
stuffInTheMiddle = "始めの方で、3匹のクマが"
Pat Arb No(pattern)
説明
引数(pattern)に0回以上マッチするパターンを生成する。
戻り値
パターン
引数
pattern
マッチ対象のパターン。
例
adjectives = "Lサイズ" | "Mサイズ" | "Sサイズ" | "温かい" | "冷たい" | "熱い" |
"甘め";
rc = Pat Match( "Mサイズの甘めの熱い紅茶を1つください",
Pat Arbno( adjectives | Pat Any("の") ) >> adj +
("紅茶" | "コーヒー" | "ミルク") );
Show( rc, adj );
rc = 1;
adj = "Mサイズの甘めの熱い";
Pat At(varName)
説明
ヌル文字列にマッチするパターンを生成し、ソース文字列の現在の場所を、指定したJSL変数(varName)に代入する。割り当ては即座に行われます。値が割り当てられた変数をexpr()で使用することにより、残りのマッチを変更することができます。
戻り値
パターン
引数
varName
結果を格納する変数の名前。
例
p = ":" + Pat At( listStart ) + Expr(
If( listStart == 1,
Pat Immediate( Pat Len( 3 ), early ),
Pat Immediate( Pat Len( 2 ), late )
)
);
early = "";
late = "";
Pat Match( ":123456789", p );
Show( early, late );
early = "";
late = "";
Pat Match( " :123456789", p );
Show( early, late );
まず次が生成されます。
early = "123"
late = ""
その後、次が生成されます。
early = ""
late = "12"
Pat Break("string")
説明
引数に含まれていない0個以上の文字にマッチするパターンを生成し、引数に含まれる文字の前でパターンマッチを停止させる。引数に含まれる文字が見つからない場合は失敗します(特に、停止のための文字が見つからないままソース文字列を最後まで検索し終わった場合)。
戻り値
パターン
引数
string
文字列
Pat Concat(pattern1, pattern2 <pattern 3, ...>)
Pattern1 + Pattern2 + ...
説明
引数で指定したパターンに順番にマッチするパターンを生成する。
戻り値
パターン
引数
2つ以上のパターン。
Pat Conditional(pattern, varName)
説明
マッチが終了し成功した場合、パターンマッチの結果を第2引数の変数(varName)に保存する。
戻り値
パターン
引数
pattern
マッチ対象のパターン。
varName
結果を格納する変数の名前。
例
type = "未定義";
rc = Pat Match(
"青りんご",
Pat Conditional( "赤" | "青", type ) + "りんご"
);
Show( rc, type );
rc = 1;
type = "青";
Pat Fail()
説明
マッチングを先に進ませないパターンを生成する。マッチングはバックアップし、別のマッチングを試行します。別のマッチングが残っていない場合、マッチングは失敗し、Pat Matchが0を戻します。
戻り値
マッチが失敗したときは0
引数
なし
Pat Fence()
説明
マッチングが先に進む場合は、成功し、ヌル文字列にマッチするパターンを生成する。バックアップが生じた場合は、失敗します。一部のマッチの最適化に使用できます。
戻り値
マッチが成功したときは1、そうでなければ0
引数
なし
Pat Immediate(pattern, varName)
説明
パターンマッチの結果を第2引数(varName)の名前の変数に即座に保存する。
戻り値
パターン
引数
pattern
マッチ対象のパターン。
varName
結果を格納する変数の名前。
例
type = "未定義";
rc = Pat Match(
"青りんご",
("赤" | "青") >> type + "なし"
);
Show( rc, type );
rc = 0
type = "青"
マッチが失敗した場合でも、割り当ては即座に行われます。
Pat Len(int)
説明
n文字にマッチするパターンを生成する。
戻り値
パターン
引数
int
文字数を指定する整数。
Pat Look Ahead(pattern, Boolean)
説明
現在の位置以後でのゼロ幅のパターンマッチ。
引数
pattern
パターン。
Boolean
0(デフォルト)は、マッチを表します。1は、マッチしないことを表します。
Pat Look Behind(pattern, Boolean)
説明
現在の位置以前でのゼロ幅のパターンマッチ。
引数
pattern
パターン。
Boolean
0(デフォルト)は、マッチを表します。1は、マッチしないことを表します。
Pat Match(SourceText, Pattern, <ReplacementText>, <NULL>, <ANCHOR>, <MATCHCASE>, <FULLSCAN>)
説明
Pat Matchは、ソーステキスト(SourceText)に対してパターン(Pattern)を実行する。直接指定する方法か、または別のJSL変数へパターンを割り当てておく方法により、パターンを生成する必要があります。
戻り値
パターンが見つかれば1、そうでなければ0
引数
SourceText
検索対象のテキストを示す文字列または文字列変数。
Pattern
検索対象のテキストを示すパターンまたはパターン変数。
ReplacementText
(オプション)ソーステキスト内でマッチしたパターンを指定した文字列に置換する。
NULL
ANCHOR、MATCHCASE、またはFULLSCANが必要で、かつ置換テキストがない場合の第3引数のプレースホルダー。
ANCHOR
(オプション)文字列の冒頭でパターンマッチを開始するためのオプション。次のパターンマッチは文字列の冒頭にパターン「cream」がないため、失敗となります。
Pat Match( "coffee with cream and sugar", "cream", NULL, ANCHOR );
MATCHCASE
(オプション)パターンマッチで大文字/小文字を区別するためのオプション。デフォルトのPat Match()は大文字/小文字を区別しません。
FULLSCAN
(オプション)Pat Matchにすべての候補を強制的に検索させるオプション。検索数が多いほど、多くのメモリが必要となります。デフォルトでは、Pat Match()はFULLSCANを使用せず、再帰を停止する、あるいはマッチングを継続するための前提を決めて動作します。
Pat Not Any("string")
説明
引数内に含まれていない1つの文字にマッチするパターンを生成する。
戻り値
パターン
引数
string
文字列
Pat Pos(int)
説明
現在の位置が文字列の左端からintのとき、ヌル文字列にマッチするパターンを生成する。その他の場合は失敗します。
戻り値
パターン
引数
int
文字列内での位置を指定する整数
Pat R Pos(int)
説明
現在の位置が文字列の右端からintのとき、ヌル文字列にマッチするパターンを生成する。その他の場合は失敗します。
戻り値
パターン
引数
int
文字列内での位置を指定する整数
Pat R Tab(int)
説明
文字列の最後からintの位置までにマッチするパターンを生成する。0文字以上の文字とマッチできます。後ろに移動する場合、または文字列の最後を超える場合は失敗します。
戻り値
パターン
引数
int
文字列内での位置を指定する整数
Pat Regex("string")
説明
指定された正規表現とマッチするパターンを生成する。正規表現を記述する引数stringは、引用符付きの文字列で指定する必要があります。
戻り値
パターン
引数
string
文字列
Pat Rem()
説明
文字列の残りにマッチするパターンを生成する。Pat R Tab(0)と等価です。
戻り値
パターン
引数
なし
Pat Repeat(pattern, minimum, maximum, GREEDY|RELUCTANT)
説明
指定されたパターン(pattern)に最小(minimum)~最大(maximum)回マッチするパターンを生成する。
戻り値
パターン
引数
pattern
マッチ対象のパターン。
minimum
最大回数。最小回数より小さい整数。
maximum
最小回数。最大回数より大きい整数。
GREEDY|RELUCTANT
GREEDYが指定されている場合、まず最大回数だけ試行してから最小回数まで戻る。RELUCTANTが指定されている場合、まず最小回数だけ試行してから最大回数まで進む。
メモ
Pat Arbno(p)は Pat Repeat(p, 0, infinity, RELUCTANT)と同じです。
Pat Repeat(p)はPat Repeat(p, 1, infinity, GREEDY)と同じです。
Pat Repeat(p, n)はPat Repeat(p, n, infinity, GREEDY)と同じです。
Pat Repeat(p, n, m)はPat Repeat(p, n, m, GREEDY)と同じです。
Pat Span("string")
説明
引数内の文字で構成されている1文字以上(0ではなく)の文字列にマッチするパターンを生成する。これはGREEDYのため、常に、可能な限り長い文字列とのマッチを行います。マッチする文字が0文字の場合は失敗します。
戻り値
パターン
引数
string
文字列
Pat String("string")
説明
文字列引数にマッチするパターンを生成する。
戻り値
パターン
引数
string
文字列
Pat Succeed()
説明
バックアップが行われた場合でも常に成功するパターンを生成する。ヌル文字列とマッチします。
戻り値
マッチが成功したときは1
引数
なし
Pat Tab(int)
説明
ソース文字列のintの位置までマッチするパターンを生成する。0文字以上の文字とマッチできます。後ろに移動する場合、または文字列の最後を超える場合は失敗します。
戻り値
パターン
引数
int
文字列内での位置を指定する整数。
Pat Test(expr)
説明
式(expr)が0以外のときは、成功し、ヌル文字列とマッチするパターンを生成する。そうでない場合は失敗します。
戻り値
パターン
引数
expr
式。
ノート
通常、引数にはexpr()が使用されます。通常、テストは、Pat Immediate、Pat Conditional、およびPat Atから戻された現在の値に対して行います。expr()を使用しないと、テストは、パターンマッチを行っている最中ではなく、パターンを生成した時点の値によって行われます。この値により、パターンマッチは常に成功するか常に失敗するかのどちらかとなってしまうため、多くの場合、意図したとおりに動作しません。
例
nCats = 0;
whichCat = 3;
string = "生米生麦生卵";
rc = Pat Match(
string,
"生" + Pat Test(
Expr(
nCats = nCats + 1;
nCats == whichCat;
)
),
"ゆで"
);
Show( rc, string, nCats );
rc = 1
string = "生米生麦ゆで卵"
nCats = 3
Regex Match(source, pattern, <replacement>|<MATCHCASE>, <NULL>)
説明
引用符付き文字列で指定されたソース(source)に対して、パターン(pattern)のマッチを実行する。
戻り値
パターン
必須の引数
source
文字列
pattern
パターン
オプションの引数
replacement
元の文字列をどのテキストに置き換えるかを示す文字列。
MATCHCASE
MATCHCASEを指定しない場合、大文字と小文字は区別されない。
NULL
式にMATCHCASEが含まれるが、replacementは指定しないことを示す。
例
Regex Match(
"person=Fred id=77 friend= favorite=tea", // source
"(\w+)=(\S*) (\w+)=(\S*) (\w+)=(\S*) (\w+)=(\S*)" // pattern
);
{"person=Fred id=77 friend= favorite=tea", "person", "Fred", "id", "77", "friend", "", "favorite", "tea"}
// 大文字と小文字の区別なし、置換テキストなし
Regex Match( "beliEve", "([aeiou])(.*?)(\1)" );
{"eliE", "e", "li", "E"}
// 大文字と小文字の区別あり、置換テキストなし
Regex Match( "beliEve", "([aeiou])(.*?)(\1)", NULL, MATCHCASE );
{"eliEve", "e", "liEv", "e"}