Main Content

possessivePattern

バックトラッキングなしでパターンに一致する

説明

newpat = possessivePattern(pat) は、pat が一度マッチしたら、pat 内をバックトラッキングしないパターンを作成します。

たとえば、alphanumericsPattern + digitsPattern の数字など、式に含まれる複数のパターンに文字が一致する可能性がある場合、一致を見つけようとする中で、可能なすべての一致の組み合わせが調べられる場合があります。このプロセスを "バックトラッキング" と呼びます。

possessivePattern はバックトラッキングを防ぎます。そのため、一度 possessivePattern が一致すると、もしその結果としてパターンが一致に失敗するとしても、一致したテキストをパターン式の他の部分に一致させることはできません。possessivePattern は、一致を探すためにテストする可能なパターンの組み合わせを制限することで、パフォーマンスを向上するために使用されます。

すべて折りたたむ

possessivePattern を使用して、パターンの独占的部分が一致した場合、バックトラッキングを行わないようにします。これにより、パターン式に含まれるその他のパターンは一致しなくなります。

txt を文字と数字から成る string として作成します。nonpossessive を、alphanumericsPattern の文字と数字と、後続する digitsPattern の数字に一致するパターンとして作成します。それ自体では、alphanumericsPattern は string 全体に一致しますが、バックトラッキングが許可されているため digitsPattern も一致することができます。

txt = "abc123";
nonpossessive = alphanumericsPattern + digitsPattern;
successfulMatch = contains(txt,nonpossessive)
successfulMatch = logical
   1

alphanumericsPattern を独占的にしてみましょう。独占的にするとバックトラッキングは行われなくなります。そのため、alphanumericsPattern は string 全体に一致し、digitsPattern も一致させるためのバックトラッキングは許可されません。この属性により、possessivetxt に一致しなくなります。

possessive = possessivePattern(alphanumericsPattern) + digitsPattern;
unsuccessfulMatch = contains(txt,possessive)
unsuccessfulMatch = logical
   0

入力引数

すべて折りたたむ

入力パターン。pattern、string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。

データ型: char | string | pattern | cell

出力引数

すべて折りたたむ

出力パターン。patternまたは pattern オブジェクトの配列として返されます。

バージョン履歴

R2020b で導入