2

WindowsのCommandLineToArgvWと同等の関数を探しています。

私は文字列を持っていますが、これはbashとまったく同じように分割したいのですが、すべてのコーナーケースがあります。つまり、一重引用符と二重引用符、円記号などを考慮に入れているため、分割a b "c'd" "\"e\"f" "g\\" h 'i"j'すると次のようになります。

a
b
c'd
"e"f
g\
h
i"j

そのような関数はすでに存在し、OS / bashで使用されているので、それを呼び出す方法、または少なくともそのソースコードを取得する方法があると思います。したがって、車輪の再発明をする必要はありません。

編集

なぜそれが必要なのかを答えるために、それは子プロセスの生成とは何の関係もありません。複数の正規表現がどのような順序でも真になるのを監視しながら、テキストを検索するプログラムを作成したいと思います。ただし、すべての正規表現は同じテキストフィールドに入力されるため、それらを分割する必要があります。

4

2 に答える 2

2

Bash とまったく同じように文字列を展開するには、Bash を実行する必要があります。Bash はパラメーター展開、コマンド置換などを行うことを思い出してください。本当に Bash とまったく同じように動作する必要がある場合は、Bash 自体を呼び出すだけです。

FILE *f = popen("bash", "r+");
fprintf(f, "echo %s", your_string);
fgets(buffer, sizeof(buffer), f);
pclose(f);

元のコードが十分に大きくない場合、実際のコードはエラーを処理し、おそらくより大きなバッファーを割り当てる必要があることに注意してください。

更新された要件を考えると、Bash とまったく同じように解析したくないようです。代わりに、引用符とエスケープを使用して、スペースで区切られた文字列を解析したいだけです。これを自分で実装することをお勧めします。指定したとおりに文字列を解析する市販のライブラリは知りません。すべてを手作業で記述する必要はありません。この目的のために、flexRagelなどの字句スキャナー ジェネレーターを使用できます。

于 2012-11-20T20:10:24.473 に答える