将字符串拆分为多个部分,包括带引号的字符串

Splitting a string into parts, including quoted strings

假设我有这一行:

print "Hello world!" out.txt

我想把它分成:

print
"Hello world!"
out.txt

匹配这些的正则表达式是什么?

注意它们之间必须有一个space。例如,如果我有这个:

print"Hello world!"out.txt

我会得到:

print"Hello
world!"out.txt

我使用的语言是 Haxe。

regex demo

\s(?![\w!.]+"\s)

一个例子适用于这两种情况,也许有人有更好的解决方案

您可以使用 EReg 在 Haxe 中使用正则表达式 api class:

演示: http://try.haxe.org/#76Ea0

class Test {
    static function main() {
        var command = 'print "Hello world!" out.txt';
        var regexp:EReg = ~/\s(?![\w!.]+")/g;
        var result = regexp.replace(command, "\n");
        js.Browser.alert(result);
    }
}

关于Haxe正则表达式:
http://haxe.org/manual/std-regex.html

关于正则表达式替换:
http://haxe.org/manual/std-regex-replace.html

EReg class API 文档:
http://api.haxe.org/EReg.html

扩展 Mark Knol 的回答,到目前为止,这对您的所有测试字符串都应该按预期工作:

static function main() {
    var command = 'print "Hello to you world!" out.txt';

    var regexp:EReg = ~/("[^"]+"|[^\s]+)/g;

    var result = [];
    var pos = 0;

    while (regexp.matchSub(command, pos)) {
        result.push(regexp.matched(0));
        var match = regexp.matchedPos();
        pos = match.pos + match.len;
    }

    trace(result);
}

演示:http://try.haxe.org/#5c0B1

编辑: 正如评论中指出的那样,如果您的用例是拆分命令行的不同部分,那么最好让解析器处理它,而不是正则表达式。

这些库可能有帮助: