Замена подстроки в строке в Asterisk
В данной заметке я приведу пример макроса, который меняет подстроку в строке в Asterisk. Собственно сам макрос:
[macro-replace] ; ; ${ARG1} - String source ; ${ARG2} - Chars to replace ; ${ARG3} - Chars to replace with ; exten => s,1,NoOp(Replacing ${ARG2} for ${ARG3} in ${ARG1}) exten => s,n,Set(str=${ARG1}) exten => s,n,Set(find=${ARG2}) exten => s,n,Set(replace=${ARG3}) exten => s,n,Set(i=0) exten => s,n,Set(length=${LEN(${str})}) exten => s,n,While($[${i} < ${length}]) exten => s,n,GotoIf($["${str:${i}:1}" != "${find}"]?continue) exten => s,n,Set(pre=) exten => s,n,GotoIf($["${i}" = "0"]?post) exten => s,n,Set(pre=${str:0:${i}}) exten => s,n(post),Set(post=) exten => s,n,GotoIf($["${i}" = $[${length} - 1]]?write) exten => s,n,Set(post=${str:$[${i} + 1]}) exten => s,n(write),Set(str=${pre}${replace}${post}) exten => s,n(continue),Set(i=$[${i} + 1]) exten => s,n,EndWhile exten => s,n,Set(REPLACERESULT=${str})