7

私は PCRE を学習していますが、オフセット ベクトルが 3 の倍数でなければならない理由がわかりませrcpcre_exec()

/* The output vector wasn't big enough */

if (rc == 0) {
    rc = OVECCOUNT / 3;
    printf("ovector only has room for %d captured substrings\n", rc - 1);
}

/* Show substrings stored in the output vector by number. Obviously, in a real
 * application you might want to do things other than print them. */

for (i = 0; i < rc; i++) {
    char *substring_start = subject + ovector[2 * i];
    int substring_length = ovector[2 * i + 1] - ovector[2 * i];
    printf("%2d: %.*s\n", i, substring_length, substring_start);
}

私には ovector が格納されているように見えるstr1_start, str1_end, str2_start, str2_end, ...ので、配列は OVECCOUNT/2 文字列を保持できます。なぜ OVECCOUNT/3 なのですか?

ありがとうございました。

4

1 に答える 1

6

マニュアル:

ベクトルの最初の 3 分の 2 は、キャプチャされた部分文字列を返すために使用されます。各部分文字列は整数のペアを使用します。ベクトルの残りの 3 分の 1 は、pcre_exec() によってキャプチャ サブパターンの照合中にワークスペースとして使用され、情報を返すために使用できません。ovecsize に渡される数値は、常に 3 の倍数でなければなりません。そうでない場合は、切り捨てられます。

于 2012-08-16T19:38:05.367 に答える