我完全看不懂。
我有以下字符串aaa||bbb||ccc
。我想按||
分。
我有一个Regex为aaa||bbb
工作,这是(.*)||(.*)
,但这并不适用于3个值或更多。
我需要一个为无限数量的值工作。
感谢EDIT:抱歉忘了说。我正在使用Ant与Ant- contrib库中的PropertyRegex任务。
所以基本上只需要普通的正则表达式
您可以使用正则表达式拆分||
上的字符串,而不是匹配和使用捕获的组:
||
如何改变如下:
[^|]+(?:||[^|]+)*
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
您不能使用普通的regex-match;相反,您需要使用某种条带的"split"函数。这取决于你使用的语言。例如,在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);
您可以使用Ant Addon Flaka中的split函数,例如:
<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