在C中使用scanf的正则表达式

我试图实现以下目标而没有任何成功:

卸下开口

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`
点赞