星号:使用多个分隔符进行剪切

问题描述 投票:0回答:1

我有一个小问题。我有一个像这样从 AGI 获取的变量。 CTI_VARIABLES:“cti_CallDirection=1@;cti_ContractNumber=00202417@;cti_TransferVDN=48195@;cti_IvrButton=1” 该变量中的每个不同变量都标记为“@;”相隔 .我正在尝试用 CUT 将它们分开。我认为 CUT 只操作其中之一,因为它接受 char。当我想用两个字符分隔时该怎么办? 这是我的拨号方案代码

exten => addheader,1,NoOp(CTI_VARIABLES: ${CTI_VARIABLES})
same => n,GotoIf($["${CTI_VARIABLES}" = ""]?noVariables)
same => n,Set(TOTAL_VARS=${FIELDQTY(CTI_VARIABLES,@\;)})
same => n,Set(COUNTER=1)
same => n,While($[${COUNTER} <= ${TOTAL_VARS}])
same => n,Set(CURRENT_VAR=${CUT(CTI_VARIABLES,@\;,${COUNTER})})
same => n,Set(VAR_NAME=${CUT(CURRENT_VAR,\=,1)})
same => n,Set(VAR_VALUE=${CUT(CURRENT_VAR,\=,2)})
same => n,Set(PJSIP_HEADER(add,${VAR_NAME})=${VAR_VALUE})
same => n,NoOp(${VAR_NAME}: ${VAR_VALUE})
same => n,Set(COUNTER=$[${COUNTER}+1])
same => n,EndWhile
same => n(noVariables),NoOp(No CTI Variables Set)

如果您建议其他方法,我可以使用。 谢谢你

我试过了

1 . same => n,Set(TOTAL_VARS=${FIELDQTY(CTI_VARIABLES,\@\;)})

2 . same => n,Set(TOTAL_VARS=${FIELDQTY(CTI_VARIABLES,@;)})

但是他们都没有用CUT将两个角色分开。

asterisk
1个回答
0
投票

您似乎正在尝试在拨号方案代码中使用 CUT 函数来划分 CTI_VARIABLES 字符串中的变量。但您遇到的问题是您有一个两个字符的分隔符“@;”,但 CUT 只允许一个字符作为分隔符。 REGEX 函数在 CURRENT_VAR=${REGEX(${CTI_VARIABLES},([^@;]+)@;,,${COUNTER})} 行中使用,使用正则表达式模式 ([^@ ;]+)@;。该模式记录一个或多个非“@”或“;”字符,然后在它们后面加上“@;”。通过使用 REGEX 函数中的 ${COUNTER} 选项,在 while 循环中一次提取一个变量。 使用与之前相同的代码设置变量名称、变量值并将它们添加为 PJSIP 标头。

© www.soinside.com 2019 - 2024. All rights reserved.