我试图实现以下目标而没有任何成功:
卸下开口
message “
和尾随
“
将内容留在中间,并使用sscanf正则表达式将其保存到我的变量中.
我写了以下代码:
sscanf( buffer, "message \"%[^\"]", message)
当我有消息“Hey there”之类的东西时效果很好,但是当我尝试下面的字符串时,我只得到两个引号之间的空白区域.
message ” “”” This is a Test “”” “
结果应该是“”这是一个测试“”“
有没有办法升级我的表达式,所以它将包括这个极端的消息事件?我试图在谷歌和这里查找它,但找不到优雅的答案.我知道可以使用大量代码进行字符串操作,但我在这里尝试更简单的东西.
附:尾随“是表达式的结束,并且是程序必须的,之后什么都没有.
在此先感谢您的反馈!
最佳答案 如果你没有使用正则表达式来完成整个事情:
原始版本:
sscanf(buffer, "message \"%[^$]", message); // remove 'message "'
message[strlen(message) - 1] = '\0'; // remove trailing '"'
安全,正确和通用版本:
char* buffer = ...;
const char* prefix = "message \"";
const char* suffix = "\"";
if (strstr(buffer, prefix) != buffer) {
// error, doesn't start with `prefix`
}
buffer += strlen(prefix);
char* suffixStart = strrchr(buffer, suffix[0]);
if (!suffixStart || strcmp(suffixStart, suffix) != 0) {
// error, doesn't end with `suffix`
}
*suffixStart = '\0'; // strip `suffix`