使用带限制的正则表达式拆分参数

时间:2011-07-20 14:46:24

标签: perl

$aa = "Main:http://google-test.com:8080/service"

(or)

$aa = "http://google-test.com:8080/service2"

我想将其分为两部分:

Main:

http://google-test.com:8080/service

但它不适用于这种分裂:

split (/\:/,$aa,1);

3 个答案:

答案 0 :(得分:5)

您需要将限制从1更改为2.

perl -le 'my $aa="Main:http://google-test.com:8080/service"; my @parts = split(/:/, $aa, 2); print scalar @parts;'

来自perldoc -f split

  

如果指定LIMIT且为正,则表示最大数量   EXPR将分成的字段,

看起来您试图将其用作拆分的最大次数而不是要返回的部件数量。

答案 1 :(得分:1)

新问题,新答案:

my ($a1, $a2) = $aa =~ /^(\w*):?(http://.+)$/;

假设“主要”部分只能是字母数字。如果省略“Main”,这也会将$a1与空字符串匹配,您可以使用if语句或类似语句检查。

斯普利特也会工作,限制为2,因为gpojd已经回答了。

my ($a1, $a2) = split /:/, $aa, 2;

但是那时你需要检查并看看你在两个变量中捕到了什么。例如。该网址可以位于$a1$a2中。然后你可能需要将它们重新加入。

答案 2 :(得分:0)

你想把它拆分为冒号吗?

尝试:

my @DATA;
$aa = "Main:http://google-test.com:8080/service";
@DATA = split(/:/, $aa);

然后您可以使用以下方式访问拆分的不同部分:

for ($i = 0; $i < @DATA; $i++)
{
  print "data section $i value is: " . $DATA[$i] . "\n";
}