繁体   English   中英

用strtok_r解析字符串

[英]string parsing with strtok_r

我的字符串看起来像这样:

abcd "efgh [data\]" pqrl 12fgd]

我想解析直到']',而后没有反斜杠'\\'

我可以用strtok_r吗? 如果不是,我该怎么办?

您可以使用strchr做到这strchr 这是我尝试做的(未尝试的)方法:

p = str;
while ((p = strchr(p, ']')) {
    if (p > str && *(p-1) != '\')
        /* This is it. */

没有一种使用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

strtok搜索集合中要搜索的任何单个字符。 您可以在]上分割,然后检查哪些字符前面带有\\,但无法使用它搜索正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM