Расщепление аргумента с использованием регулярного выражения с ограничением - PullRequest
0 голосов
/ 20 июля 2011
$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 ]

5 голосов
/ 20 июля 2011

Вам нужно изменить лимит с 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 голос
/ 20 июля 2011

Новый вопрос, новый ответ:

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

Предполагая, что часть "Основная" может быть только буквенно-цифровой.Это также будет соответствовать $a1 пустой строке, если пропущен «Main», который можно проверить с помощью оператора if или аналогичного.

Split также будет работать, с ограничением в два, как gpojdуже ответил.

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

Но тогда вам нужно будет проверить и посмотреть, что вы поймали в двух переменных.Например, URL может быть либо $a1, либо $a2.И вам, возможно, придется потом объединить их.

0 голосов
/ 20 июля 2011

Вы хотите разделить его на двоеточия?

попробовать:

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";
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...