Cでは、スキャンセット変換を使用してこれを行うことができます(ただし、少しREに似ているため、構文が少し奇妙になります)。
sscanf(input, "[%*[^]]][%[^]]]", second_string);
それがどのように機能するのか疑問に思っている場合は、最初[
の括弧は文字通り開いた括弧と一致します。%[allowed_chars]
次に、またはのように見えるスキャンセットがあります%[^not_allowed_chars]
。この場合、最初のまでスキャンしている]
ので、%[^]]
です。最初の例では、変換仕様のと残りの*
間にあります。つまり、そのパターンに一致しようとしますが、無視します。結果を何にも割り当てないでください。その後に、文字通り一致するaが続きます。%
sscanf
]
次に、基本的に同じことを繰り返しますが、。がない*
ため、この変換によって一致する2番目のデータがに割り当てられsecond_string
ます。
タイプミスを修正し、最初のコードをスキップするために少し余分なコードを追加するとXYZ ::
、動作する(テストされた)コードは次のようになります。
#include <stdio.h>
int main() {
char *input = "XYZ ::[1][20 BB EC 45 40 C8 97 20 84 8B 10]";
char second_string[64];
sscanf(input, "%*[^[][%*[^]]][%[^]]]", second_string);
printf("content: %s\n", second_string);
return 0;
}