我对番石榴分裂的可能性感兴趣:

Splitter.on("|").split("foo|bar|baz");
// => "foo", "bar", "baz"

这可以正常工作。

现在,如果我想分割“|”怎么办但不在“[”和“]”之间:
Splitter.on(something).split("foo|ba[r|ba]z");
// => "foo", "ba[r|ba]z"

据我了解,不可能在番石榴中定义这种“东西”。

我找到了这个:
Issue 799: Add google escape library to Guava。这有关系吗?

最佳答案

解决此问题的正确方法是制作一个解析器。如今,仅使用解析器组合器(例如JParsec)就非常容易。您将获得如下内容:

class ParserFactory {

    Parser escapedSequence() {
        return Parsers.between(Scanners.string("["),
            Scanners.anyCharacterButNot("]"), Scanners.string("]"));
    }

    Parser chunk() {
        return Parsers.or(escapedSequence(), Scanners.anyCharacterButNot("|"));
    }

    Parsers wholeThing() {
        return Parsers.separatedBy(chunk().plus(), Scanners.string("|"));
    }
}

09-16 05:41