根本無法解決這個問題。用管道分割字符串的正則表達式
我有以下字符串aaa||bbb||ccc
。我想分開||
。
我有一個正常工作的aaa||bbb
這是(.*)\|\|(.*)
,但不適用於3個值或更多。
我需要一個爲無限數量的值工作。
感謝
編輯:對不起忘了提。我從Ant-Contrib庫中使用Ant和PropertyRegex任務。
所以基本上只需要普通的正則表達式。
根本無法解決這個問題。用管道分割字符串的正則表達式
我有以下字符串aaa||bbb||ccc
。我想分開||
。
我有一個正常工作的aaa||bbb
這是(.*)\|\|(.*)
,但不適用於3個值或更多。
我需要一個爲無限數量的值工作。
感謝
編輯:對不起忘了提。我從Ant-Contrib庫中使用Ant和PropertyRegex任務。
所以基本上只需要普通的正則表達式。
使用捕獲組匹配而不是和,您可以使用正則表達式上||
分割字符串:
\|\|
你不能做到這一點與普通的正則表達式匹配;相反,你需要使用一些條帶的「分割」功能。這將取決於您使用的語言。例如,在Java中,你可以寫:
final String[] fields = "aaa||bbb||ccc".split("[|][|]", -1);
或在Perl:
my @fields = split /\|\|/, 'aaa||bbb||ccc', -1;
如果您更新您的問題,表示你所使用的語言,你會得到一個更加有用的答案。
下面的代碼將解決這個
string x1 = "aaa||bbb||ccc";
string[] result = Regex.Split(x1, @"\|\|");
你可以使用這個太
string[] parts = x1.Split(new string[] { "||" }, StringSplitOptions.None);
如何以下的變化:
[^|]+(?:\|\|[^|]+)*
1 2 1
凡1
匹配任何東西,但管和2
匹配你的分隔符?
Matches-->aaa
Matches-->aaa||bbb
Matches-->aaa||bbb||ccc
Matches-->aaa||bbb||ccc||ddd
Does not match-->aaa||
Does not match-->aaa|bbb
Does not match-->aaa|bbb|ccc
你可以使用分割功能從螞蟻附加組件Flaka,F.E. :
<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">
<property name="somestring" value="aaa||bbb||ccc"/>
<fl:let>counter = 0</fl:let>
<fl:for var="substring" in="split('${somestring}','\|\|')">
<fl:let>counter = counter + 1</fl:let>
<!-- simple echo -->
<fl:echo>substring #{counter} => #{substring}</fl:echo>
<!-- create properties for further processing -->
<fl:let>substring#{counter} := '#{substring}'</fl:let>
</fl:for>
<echo>
$${substring1} => ${substring1}
$${substring2} => ${substring2}
$${substring3} => ${substring3}
</echo>
</project>
輸出:
Buildfile: /home/rosebud/AntTest/tryme.xml
[fl:echo] substring 1 => aaa
[fl:echo] substring 2 => bbb
[fl:echo] substring 3 => ccc
[echo] ${substring1} => aaa
[echo] ${substring2} => bbb
[echo] ${substring3} => ccc
當它總是兩管的順序,爲什麼不(在C#一樣string.Split)通過使用簡單的字符串操作將其分割?甚至需要更少的計算工作。 – Matthias 2011-12-16 03:13:47
哪種語言? – codaddict 2011-12-16 03:16:33