Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Разделение строки


Автор: Aleshka 10.12.2007, 11:52
Есть такая строка:
Jul 19 22:36:19 gups:  Peer name: "user_lesha"
Мне нужно из данной строки выбрать подстроку которая стоит до второго двоеточия. Т.е Jul 19 22:36. Как мне это сделать думал использовать split, но не соображу какое регулярное выражение я должен указать чтобы выбор происходил по второму двоеточию.  
 


Автор: amg 10.12.2007, 12:22
Код

$str = 'Jul 19 22:36:19 gups:  Peer name: "user_lesha"';
$res = join ':', (split /:/, $str)[0,1];
($res) = $str =~ /^([^:]*:[^:]*):/;
$res = substr $str, 0, 12;

Автор: Aleshka 10.12.2007, 12:29
Спасибо amg, это то что нужно. А можно подробней узнать про второй вариант 
Код

$res = join ':', (split /:/, $str)[0,1];
подробней рассказать, как оно работает?

Автор: amg 10.12.2007, 12:45
Цитата(Aleshka @  10.12.2007,  12:29 Найти цитируемый пост)
подробней рассказать, как оно работает?
Это не самый удачный вариант, привел я его исключительно потому, что было упомянуто слово split. Работает следующим образом:
Код

$str = 'Jul 19 22:36:19 gups:  Peer name: "user_lesha"';
@array = split /:/, $str;
@array_slice = @array[0,1];
$res = join ':', @array_slice;


Автор: Aleshka 10.12.2007, 13:22
А понял, Вы уж простите, может Вам вопросы кажутся простыми но я не очень силен в perl. Особенно сложны для моего понимания  регулярные выражения. Просмотрел третий вариант кода 
Код

($res) = $str =~ /^([^:]*:[^:]*):/;

В этом  коде вроде все понятно, но не понял последнее предназначение ":" после ).   Спасибо. 

Автор: amg 10.12.2007, 13:42
Цитата(Aleshka @  10.12.2007,  13:22 Найти цитируемый пост)
не понял последнее предназначение ":" после )
В принципе, это двоеточие не обязательно. Оно чуть увеличивает надежность. Без него, например, подойдет строка "http://www.yandex.ru", а с ним - нет.

Автор: Aleshka 10.12.2007, 14:42
Спасибо, amg за ответы. Эх, не могу я вам поставить +. :(.

Автор: nitr 10.12.2007, 22:21
Поставил "+" , но за другие заслуги больше, чем за этот пост ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)