'abc \'abc\' "123" 12\\'3' のような文字列があります。
私がやりたいのは、Unix 端末のように解析することです。複雑な正規表現を扱わずにこれを行う方法はありますか?
例:
java -jar foo.jar abc 'abc' "123" 12\'3
この文字列の配列になります["abc","abc","123","12'3"]
これを可能にするJavaに組み込まれたライブラリ/機能はありますか?
独自のパーサーを作成するか (簡単にするために、Guava を使用しCharMatcher
て文字を照合することをお勧めします)、既存のパーサー ライブラリを使用することができます。私の個人的なお気に入りはParboiledです。文法を Java で記述できるからです。
たとえば、この非常に大まかな文法は、文字のみを含む単語に分割されます (ただし、私のパーボイルド フーは少し錆びていることに注意してください)。
Rule Spaces()
{
return OneOrMore(AnyOf(" \t"));
}
Rule Letter()
{
return Range('a', 'z');
}
Rule Word()
{
return OneOrMore(IgnoreCase(Letter());
}
Rule OneLine()
{
// EOI == End Of Input
return Sequence(Optional(Spaces()), Word(),
ZeroOrMore(Sequence(Spaces(), Word()), EOI);
}
最終的にすべての文字列のリストを取得できるように、値をなどにプッシュできるスタックがあります。