Help with regexp (for osc parsing/formatting)

willyc's icon

Hi,

Sorry for asking such an explicit 'how do i do this' type question. I'd normally prefer to ask 'what technique should i use to do this'.....

I have a (osc) message of the form:

/deviceName/INSTANCE_ID/controlName/CONTROL_INSTANCE_ID data1 data2 data3....etc

I'd like to pass the address (i.e. first section) of this message through a regexp object such that if the "deviceName" and "controlName" match those expected (i.e. those written into the regexp string) I obtain a max message (list) of the form:

INSTANCE ID controlName CONTROL_INSTANCE_ID

I know I could do this with [OSC-Route] and a wildcard, but this would produce INSTANCE_ID#s as strings such as "/2". This is no good as the string requires further processing to remove the leading slash to be usable as an integer.

(For bonus points, I intend to target a pattr object who's scripting name is "controlName[CONTROL_INSTANCE_ID]" - can the regexp format its output like this, or do I still need to run it through a [sprintf %s[%ld] ]?)

Similarly, does regexp have 'the power' to convert a symbol such as "word[number]" into the following list:

word number

(or for more bonus points, into the symbol "word/number" without using [sprintf %s/%ld ])

Or is there a better object to parse the 'word' and/or 'number' from the symbol "word[number]"?

Again, apologies for such a direct request. I'll happily accept a link to decent regexp examples/tutorials as an answer (the reference/help files are failing to overcome the mental block I have when it comes to regexes and how these relate to the output produced by regexp)

Cheers

willyc's icon

After some more tinkering (and simplyfying how I was using regexp) I have the following 'solutions' to the two cases I posted about previously.

Max Patch
Copy patch and select New From Clipboard in Max.

Any suggestions/tips/pointers on how to make better use of the regexp objects would be much appreciated

willyc's icon

After some more work, I now have an abstraction that will convert any pattr path string into an OSC address. Save the patch (e.g. as OSC-address-format) and instantiate objects with an argument to specify your 'address prefix'

E.g. [OSC-address-format abc]

will convert:
subpatch::guiElement[1]
to
/abc/subpatch/guiElement/1

Max Patch
Copy patch and select New From Clipboard in Max.

Again, as I'm using regexp I'd be grateful if anyone can offer tips to improve how the abstraction implements this functionality

willyc's icon
Max Patch
Copy patch and select New From Clipboard in Max.

And here is the inverse, for parsing an OSC address into a pattr path

spectro's icon

After a quick look this looks pretty good, I've not much to add (given that I find regexp a little intimidating at best) except that there are some illustrations/tutorials in the CNMAT MMJ-Depot files (check the CNMAT site) to do with working with OSC and pattr that you may like to check out to compare notes...

Luke Hall's icon
Max Patch
Copy patch and select New From Clipboard in Max.

This should simplify it a bit for the test cases you have shown in your examples here. I hope it is helpful.