我的字符串如下所示:
abcd "efgh [data\]" pqrl 12fgd]
我想解析直到']',而不是反斜杠'\'
我可以使用strtok_r
吗?如果不是我应该怎么做?
答案 0 :(得分:3)
您可以使用strchr
执行此操作。以下是我尝试这样做的方法(未经测试):
p = str;
while ((p = strchr(p, ']')) {
if (p > str && *(p-1) != '\')
/* This is it. */
答案 1 :(得分:2)
使用strtok_r
执行此操作没有一种方法。由于您的分隔符是单个字符,因此如果strtok_r
返回的标记的最后一个字符是'\',则可以通过填充分隔符来重建所需的字符串。
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "abcd \"efgh [data\\]\" pqrl 12fgd]";
char *tokens[2] = {0};
char *pToken = str;
unsigned int i = 0;
for( tokens[i] = strtok_r( str, "]", &pToken ); ++i < 2;
tokens[i] = strtok_r( NULL, "]", &pToken ) ) {
}
for( i = 0; i < 2; ++i ) {
printf( "token %d = %s\n", i, tokens[i] );
}
for( i = 0; i < 2; ++i ) {
if( tokens[i][strlen(tokens[i]) - 1] == '\\' ) {
tokens[i][strlen(tokens[i])] = ']';
}
}
printf( "output = %s\n", str );
return 0;
}
输出:
token 0 = abcd "efgh [data\
token 1 = " pqrl 12fgd
output = abcd "efgh [data\]" pqrl 12fgd
答案 2 :(得分:1)
strtok搜索要搜索的集合中的任何单个字符。你可以拆分],然后检查哪些有前面的\但你不能用它搜索正则表达式。