10.3 Pattern Matching

# パターン マッチング

foo

## あらゆるpath要素へのマッチ

pathが3つに区切られている次のイベントを待ちたいとしましょう。

```
sync "/*/*/*"
```

このパターンはちょうど3つの区分を持つpathならば, その区分の名前に関わらずどんなTime Stateイベントにもマッチします。 例えば:

* `cue "/foo/bar/baz"`
* `cue "/foo/baz/quux"`
* `cue "/eggs/beans/toast"`
* `cue "/moog/synths/rule"`

しかし、区分の数が少なかったり多かったりするpathにはマッチしません。 例えば以下のものにはマッチしないでしょう:

* `cue "/foo/bar"`
* `cue "/foo/baz/quux/quaax"`
* `cue "/eggs"`

それぞれの`*`は「あらゆるもの」を意味しています。 なので、区分が一つだけのpathには `/*` でマッチでき、5つの区分を持つpathには次のパターンでマッチできます: `/*/*/*/*/*`

## 部分的なパス要素へのマッチング

foo

* `cue "/foo/bar/baz"`
* foo
* foo

しかし、以下のものにはマッチしないでしょう：

* foo
* foo
* foo

foo

## ネストされたpath要素へのマッチ

foo

* `cue "/foo/bar/baz"`
* foo
* foo
* foo

## 一文字へのマッチング

1文字へのマッチングには `?` の文字を使うことができ、`"/?oo/bar/baz"` は次のようにマッチします:


* `cue "/foo/bar/baz"`
* `cue "/goo/bar/baz"`
* `cue "/too/bar/baz"`
* `cue "/woo/bar/baz"`

## 複数の文字へのマッチング

foo

* foo
* foo
* foo

## 複数の文字へのマッチング

foo

* foo
* foo
* foo


foo

* foo
* foo
* foo
* foo
* foo

## Combining Matchers

`sync`または`get`を呼び出している時には、マッチング規則を自由な順番に組み合わせて`cue`や`set`で生まれるどんなTime Stateイベントにもパワフルにマッチさせることができます。 すごい例を見てみましょう。

```
sample :loop_amen
```

## OSC パターンマッチング

For those curious, these matching rules are based on the Open Sound Control pattern matching specification which is explained in detail here: https://opensoundcontrol.stanford.edu/spec-1_0.html
