因此,假設我有這樣一行:將字符串分割成幾部分,其中包括引號的字符串
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