проблема регулярного выражения в Perl - PullRequest
1 голос
/ 04 декабря 2010

у меня есть такие строки

объект1: объект2: объект3: остаток строки

Я хочу регулярное выражение для извлечения каждого текста до двоеточия.

В этом случае мне нужно:

$ 1 = объект1 $ 2 = объект2 $ 3 = объект3 $ 4 = остаток строки

Я пытался с этим:

$_ =~ m/\(.*\):\(.*\):\(.*\):\(.*\)/i

но, похоже, не работает.

где я не прав?

Ответы [ 3 ]

4 голосов
/ 04 декабря 2010

Почему вы используете регулярное выражение для этого, когда split делает именно то, что вы хотите?

$x = "object1:object2:object3:rest of the line";
@x = split (":", $x);
foreach $s (@x) {
        print "$s\n";
}

Это выводит:

object1
object2
object3
rest of the line

Если выЕсли вы хотите ограничить себя четырьмя полями, независимо от количества двоеточий, вы можете использовать:

$x = "object1:object2:object3:rest of the line with a : character";
@x = split (":", $x, 4);
foreach $s (@x) {
        print "$s\n";
}

, который выдает:

object1
object2
object3
rest of the line with a : character
3 голосов
/ 04 декабря 2010

Вам необходимо удалить \:

$_ =~ m/(.*?):(.*?):(.*?):(.*)/i

Кроме того, i (сопоставление без учета регистра) является избыточным, поскольку в вашем регулярном выражении нет символов, а также m, который позволяет вам выбрать другой граничный символ, отличный от /. Вам также не нужен $_ =~, поскольку Perl по умолчанию равен $_. Таким образом, вы можете уменьшить его до:

/(.*):(.*):(.*):(.*)/

http://ideone.com/TLepM

1 голос
/ 04 декабря 2010
my @objects = split ':', $data_line, 4;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...