Este post me ha inspirado y animado para echar un vistazo al tutorial de creación de módulos para asterisk que corre por ahí, y estoy trabajando en la aplicación app_regex, esta es la información sobre su funcionamiento:
asterisk1*CLI> core show application regex
asterisk1*CLI>
-= Info about application 'Regex' =-
[Synopsis]
Regex dialplan application
[Description]
Usage: Regex(varname,rex,input)
Applies the regular expression rex to input
and stores the result in varname
Está al 90% y estoy pensando la mejor forma de pasar las coincidencias encontradas al dialplan. De momento la ultima coincidencia la asigna a la variable cuyo nombre se indica en la llamada, un ejemplo de uso desde el dialplan sería:
exten =>1001,1,noop(regex test)
exten =>1001,n,Regex(test,H(ol)a/,Hola)
exten =>1001,n,noop(${test})
exten =>1001,n,hangup
Que asignaría "ol" a la variable test.
En el caso que inicio este post para cortar la cadena tal y como comentaba Gonzalo la cosa podría ser tal que así:
exten =>1001,n,Regex(test,(.*)/(.*)/(.*),a/b/c)
Y en lugar de devolver el ultimo "match" podría devolver la concatenación de todas las coincidencias.
No se si la aplicación en si tiene sentido, algunas veces he tenido que llamar a un agi para hacer cosas de este tipo y app_regex podría ser una buena solución. En cualquier caso es un buen ejercicio.
Si alguien tiene alguna sugerencia será bienvenida.
Saludos