因此,假设我有这样一行:将字符串分割成几部分,其中包括引号的字符串
print "Hello world!" out.txt
而且我想把它分成:
print
"Hello world!"
out.txt
什么是正则表达式来匹配这些?
请注意,它们之间必须有一个空格。举例来说,如果我有这样的:
print"Hello world!"out.txt
我会得到:
print"Hello
world!"out.txt
我使用的语言是HAXE。
因此,假设我有这样一行:将字符串分割成几部分,其中包括引号的字符串
print "Hello world!" out.txt
而且我想把它分成:
print
"Hello world!"
out.txt
什么是正则表达式来匹配这些?
请注意,它们之间必须有一个空格。举例来说,如果我有这样的:
print"Hello world!"out.txt
我会得到:
print"Hello
world!"out.txt
我使用的语言是HAXE。
扩大对马克的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);
}
编辑: 正如在评论中指出,如果你的使用情况是拆分命令行的不同部分,那么它应该是最好有一个语法分析器处理它,而不是正则表达式。
这些库可以帮助:
这似乎工作最好,谢谢!不过,你可能是对的,我一直在想手动解析它可能更好。这些图书馆似乎并不完全符合我的要求;我不是完全分析命令行参数,而是自定义脚本语法。尽管我可以实现自己的一个,但我最初认为正则表达式可能更有效。一切都一样,谢谢! – puggsoy
您可以使用EREG API类使用HAXE正则表达式:
演示: 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类的API文档:
http://api.haxe.org/EReg.html
什么是 “这些”?前两个例子是矛盾的。在第一个例子中,用一个换行符替换每个空格,除了字符串中的一个,而在第二个空格中,每当有空格时,无论它是否在字符串中,都会拆分。我错过了什么吗? –
正则表达式通常在不同的语言中工作。 – melpomene
令牌的语法在哪里? Haxe似乎是一种可以编译成其他语言的语言。你的目标语言是什么?用你的命令行格式编写一个正则表达式并不知道你想要支持什么,这是十分鲁莽的。 – nhahtdh