在工作中调查一个解析asr识别结果错误问题时顺带看了下源码,发现里面支持自定义传参分隔符:
——识别结果的XML内容里面包含|
方式1:
SWITCH_DECLARE(unsigned int) switch_separate_string(char *buf, char delim, char **array, unsigned int arraylen) { if (!buf || !array || !arraylen) { return 0; } if (*buf == '^' && *(buf+1) == '^') { char *p = buf + 2; if (*p && *(p+1)) { buf = p; delim = *buf++; } } memset(array, 0, arraylen * sizeof(*array)); return (delim == ' ' ? separate_string_blank_delim(buf, array, arraylen) : separate_string_char_delim(buf, delim, array, arraylen)); }regex ^^!<name>|xfs</name>!<name>(.*?)</name>!%1
输出|xfs
方式2(只支持~/|):
if (*d == 'm' && *(d + 1) == ':' && *(d + 2)) { char t = *(d + 2); switch (t) { case '|': case '~': case '/': d += 3; delim = t; break; default: break; } }regex m:~<name>|xfs</name>~<name>(.*?)</name>~%1
输出|xfs
针对方式1,同理
sofia ^^! status!profile!internal
sofia ^^* status*profile*internal
重点说明哈:不是所有API都支持自定义哈