Correspondance de motif

Quand vous obtenez et affectez de l’information dans l’État du Temps, il est possible d’utiliser des clés plus complexes que les symboles basiques comme :fooet :bar. Vous pouvez également utiliser des chaînes de caractères de format URL appelées chemin comme "/foo/bar/baz". Lorsque nous avons commencé à travailler avec les chemins, nous pouvons commencer à prendre avantage du système sophistiqué de correspondance de motif de Sonic Pi pour get et sync des chemins “similaires” au lieu “d’identiques”. Étudions cela de plus près.

Faire correspondre n’importe quel segment de chemin

Assumons que nous voulons attendre pour le prochain événement qui a trois segments de chemin :

sync "/*/*/*"

Ceci va faire une correspondance avec tout événement d’État du Temps avec exactement trois segments de chemin, et ce, peu importe leur nom. Par exemple :

Toutefois, ça ne correspondra pas avec des chemins qui ont plus ou moins de segments. L’élément suivant n’aura pas de correspondance :

Chaque * signifie n’importe quel contenu. Donc, nous pourrions trouver des correspondance avec des chemins d’un seul segment avec /* ou des chemins avec cinq segments avec /*/*/*/*/*

Faire des correspondances de segments partiels

Si nous savons par quoi le segment va commencer ou finir, nous pouvons utiliser un * en plus d’un nom de segment partiel. Par exemple : "/foo/b*/baz" correspondra à tout chemin possédant trois segments, le premier étant foo, le dernier baz, et celui du milieu pouvant être n’importe quoi commençant par un b. Il correspondra alors à :

Cependant, cela ne correspondrait pas avec ceci :

Vous pouvez également placer le * au début du segment pour spécifier les derniers caractères d’un segment : "/foo/*zz/baz" ce qui correspondra à n’importe quel triple segment cue ou set où le premier segment est foo, le dernier est baz et celui du milieu fini avec zz comme "cue "/foo/whizz/baz".

Faire correspondre des segments de chemins imbriqués

Parfois, vous ne connaissez pas le nombre de segments de chemin devant correspondre. Dans ce cas, vous pouvez utiliser la puissante double-étoile : ** et ainsi "/foo/**/baz" correspondra à :

Faire correspondre des lettres

Vous pouvez utiliser le caractère ? pour faire une correspondance sur un seul caractère comme "/?oo/bar/baz" ce qui correspondra avec :

Faire correspondre plusieurs mots

Si vous savez qu’un segment pourrait être un parmi un ensemble particulier de mots, vous pouvez utiliser les correspondances { et } pour spécifier une liste de choix tel que "/foo/{bar,beans,eggs}/quux" qui correspondra uniquement à ceci :

Faire correspondre plusieurs lettres

Finalement, vous pouvez faire correspondre à une sélection de lettres si vous utilisez les correspondances [ et ] pour spécifier une liste de choix tel que "/foo/[abc]ux/baz" qui correspondra uniquement à :

Vous pouvez également utiliser le caractère - pour spécifier un ensemble de lettres. Par exemple "/foo/[a-e]ux/baz" qui correspondra uniquement à :

Combiner des correspondances

En appelant sync ou get, vous êtes libre de combiner des correspondances dans n’importe quel ordre qui vous convient pour faire correspondre des événements d’État du Temps créés par cue ou set. Regardons un exemple fou :

in_thread do
  sync "/?oo/[a-z]*/**/ba*/{quux,quaax}/"
  sample :loop_amen
end
sleep 1
cue "/foo/beans/a/b/c/d/e/bark/quux/"

Correspondance de motif OSC

Pour les curieux, ces règles de correspondance sont basées sur la spécification de correspondance de motif Open Sound Control, qui est expliquée en détail ici : http://opensoundcontrol.org/spec-1_0