1

私の文字列は次のようになります。

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

バックスラッシュ '\' で始まらない ']' まで解析したい

でできますstrtok_rか?そうでない場合は、どうすればよいですか?

4

3 に答える 3

3

あなたはそれを行うことができますstrchr。これが私がそれをやろうとする方法です(テストされていません):

p = str;
while ((p = strchr(p, ']')) {
    if (p > str && *(p-1) != '\')
        /* This is it. */
于 2011-08-09T16:10:16.027 に答える
2

を使用してこれを行う一発の方法はありませんstrtok_rstrtok_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
于 2011-08-09T16:38:17.780 に答える
1

strtok は、検索対象セット内の任意の 1 文字を検索します。] で分割してから、前に \ があるものを確認できますが、それを使用して正規表現を検索することはできません。

于 2011-08-09T16:08:09.913 に答える