# Pattern Matching

foo

## Match any path segment

Let’s assume we want to wait for the next event that has three path segments:

    sync "/*/*/*"

This will match any Time State event with exactly three path segments, regardless of their names. For example:

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

However, it will not match paths with fewer or more path segments. The following will not match:

`cue "/bla/bar"` `cue "/bla/baz/quux/quaax"` `cue "/eggs"`

Each `*` means any content. So we could match paths with just one segment with `/*` or paths with five segments with `/*/*/*/*/*`

## Matching partial segments

foo

`cue "/bla/bar/baz"` `cue "/bla/baz/baz"` `cue "/bla/beans/baz"`

However, it wouldn’t match the following:

`cue "/bla/flibble/baz"` `cue "/bla/abaz/baz"` `cue "/bla/beans/baz/eggs"`

foo

## Matching Nested Path Segments

foo

`cue "/bla/bar/baz"` `cue "/bla/bar/beans/baz"` `cue "/bla/baz"` `cue "/bla/a/b/c/d/e/f/baz"`

## Matching Single Letters

You can use the `?` character to match against a single char such as `"/?oo/bar/baz"` which will match:

`cue "/bla/bar/baz"` `cue "/goo/bar/baz"` `cue "/too/bar/baz"` `cue "/woo/bar/baz"`

## Matching Multiple Words

foo

`cue "/bla/bar/quux"` `cue "/bla/beans/quux"` `cue "/bla/eggs/quux"`

## Matching Multiple Letters

foo

`cue "/bla/aux/baz"` `cue "/bla/bux/baz"` `cue "/bla/cux/baz"`

foo

`cue "/bla/aux/baz"` `cue "/bla/bux/baz"` `cue "/bla/cux/baz"` `cue "/bla/dux/baz"` `cue "/bla/eux/baz"`

## Combining Matchers

When calling `sync` or `get` you are free to combine matchers in any order you see fit to powerfully match any Time State event created by `cue` or `set`. Let’s look at a crazy example:

    sample :loop_amen

## OSC Pattern Matching

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