0

'abc \'abc\' "123" 12\\'3' のような文字列があります。

私がやりたいのは、Unix 端末のように解析することです。複雑な正規表現を扱わずにこれを行う方法はありますか?

例: java -jar foo.jar abc 'abc' "123" 12\'3

この文字列の配列になります["abc","abc","123","12'3"]

これを可能にするJavaに組み込まれたライブラリ/機能はありますか?

4

1 に答える 1

0

独自のパーサーを作成するか (簡単にするために、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);
}

最終的にすべての文字列のリストを取得できるように、値をなどにプッシュできるスタックがあります。

于 2013-06-05T18:13:04.360 に答える