文字列をトークン化しようとしています。限り何のクォート文字がすべて存在しないとしてもです:引用符付き文字列をトークン化
string:tokens ("abc def ghi", " ").
["abc","def","ghi"]
しかし、文字列:トークン/ 2は、引用符で囲まれた文字列でずっと私を助けません。私は必要なのトークン化される文字列をとる関数、区切りと引用符文字である
string:tokens ("abc \"def xyz\" ghi", " ").
["abc","\"def","xyz\"","ghi"]
:それは期待通りに動作します。ような何か:今
tokens ("abc \"def xyz\" ghi", " ", "\"").
["abc","def xyz","ghi"]
私は車輪の再発明を開始する前に、私の質問は:
があり、そのような機能や標準のlibsで同様のものですか?
EDIT:
OK、私は私の独自の実装を書いたが、私はまだ元の質問への答えに非常に興味があります。これまでのところ私のコードは次のとおりです:
tokens (String) -> tokens (String, [], []).
tokens ([], Tokens, Buffer) ->
lists:map (fun (Token) -> string:strip (Token, both, $") end, Tokens ++ [Buffer]);
tokens ([Character | String], Tokens, Buffer) ->
case {Character, Buffer} of
{$ , [] } -> tokens (String, Tokens, Buffer);
{$ , [$" | _] } -> tokens (String, Tokens, Buffer ++ [Character]);
{$ , _} -> tokens (String, Tokens ++ [Buffer], []);
{$", [] } -> tokens (String, Tokens, "\"");
{$", [$" | _] } -> tokens (String, Tokens ++ [Buffer ++ "\""], []);
{$", _} -> tokens (String, Tokens ++ [Buffer], "\"");
_ -> tokens (String, Tokens, Buffer ++ [Character])
end.
正規表現を考えましたか?簡単にする方法の1つかもしれません。 –