Модераторы: ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярные выражения в PERL 
:(
    Опции темы
scion
Дата 13.5.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



вопрос, есть текстовый файлик вида:

a:2:{s:5:"login";s:5:"admin";s:3:"pwd";s:6:"tester";}
.....
...

как мине в переменную из этой строчки вытащить login и pwd. (в данном примере admin и tester )

спасибо за помощь..

PM MAIL   Вверх
sir_nuf_nuf
Дата 13.5.2009, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 1
Всего: 31



Код

my $str = 'a:2:{s:5:"login";s:5:"admin";s:3:"pwd";s:6:"tester";}';
my ($login, $pass) = ($str =~ /"login"[^"]*?"(\w+)".*?"pwd"[^"]*?"(\w+)"/);



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
arto
Дата 13.5.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: нет
Всего: 40



# perl -le 'print join "\n",(split "\"",$ARGV[0])[3,7]' 'a:2:{s:5:"login";s:5:"admin";s:3:"pwd";s:6:"tester";}'
admin
tester
#
PM MAIL ICQ   Вверх
scion
Дата 13.5.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



спасибо мужики!
то что надо!

PM MAIL   Вверх
scion
Дата 15.5.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



можно ещё вопрос, как из массива имён вытащить только по одному имени, даже если он повторяется
пример
@str= 'dima vase igor dima lese vase';

результат должен быть: 'dima vase igor'

PM MAIL   Вверх
arto
Дата 15.5.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: нет
Всего: 40



hash?
PM MAIL ICQ   Вверх
scion
Дата 15.5.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



нет. просто есть строка вытащенная и файла. в которой повторяются слова. надо что бы все слова были уникальны.

PM MAIL   Вверх
DaemonSuw
Дата 15.5.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



массив в хешь = уникальность элементов массива

Код

@a = (1,2,3,1,2,3,1,2,3);
print join(', ',@a)."\n";
my %hash;
foreach my $element (@a) {$hash{$element}++;}
print join(', ',keys %hash)

PM MAIL ICQ   Вверх
scion
Дата 15.5.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Цитата(DaemonSuw @ 15.5.2009,  13:58)
массив в хешь = уникальность элементов массива

Код

@a = (1,2,3,1,2,3,1,2,3);
print join(', ',@a)."\n";
my %hash;
foreach my $element (@a) {$hash{$element}++;}
print join(', ',keys %hash)

запустил не работает. =((
1, 2, 3, 1, 2, 3, 1, 2, 3
1, 3, 2

Добавлено через 2 минуты и 10 секунд
упс... у меня что-то с мозгами.... спасибо всё работает.... =))
PM MAIL   Вверх
scion
Дата 15.5.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



почему на работает поиск по массиву:
if (@m =~ /data/) 
или в перле незя так искать в массиве?
PM MAIL   Вверх
DaemonSuw
Дата 15.5.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



Так нельзя или через цикл или коротко 

Код

use Data::Dump qw/dump/;
@m = ('data','bugagaga','data12');
print dump(grep(/data/,@m));

PM MAIL ICQ   Вверх
arto
Дата 15.5.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: нет
Всего: 40



# perl -le '@ary = qw(a b c d); print "a: ",@ary ~~ m#a#?"yes":"no"; print "e: ",@ary ~~ m#e# ? "yes" : "no"; print "Perl: ",$^V'
a: yes
e: no
Perl: v5.10.0
# 
PM MAIL ICQ   Вверх
DaemonSuw
Дата 15.5.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



arto, "~~" - новые вкусности)... 
забыл совсем(
PM MAIL ICQ   Вверх
scion
Дата 15.5.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



This is perl, v5.8.9 built for i386-freebsd-64int  =((
в портах 10 нету =(

ладно а если циклами...

@a = (1,2,3,1,2,3,1,2,3);
print join(', ',@a)."\n";
my %hash;
foreach my $element (@a) {$hash{$element}++;}
print join(', ',keys %hash)

если я сделаю так:
@mas=join(', ',keys %hash);

то как мине обратится к элементам массива по индексам? $mas[3] - не работает.... ='(


PM MAIL   Вверх
arto
Дата 15.5.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: нет
Всего: 40



grep { !$_{$_}++ } split ",","a,b,s,b,a"
PM MAIL ICQ   Вверх
scion
Дата 15.5.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Цитата(arto @ 15.5.2009,  15:53)
grep { !$_{$_}++ } split ",","a,b,s,b,a"

не понял. можно подробнее.
PM MAIL   Вверх
amg
Дата 15.5.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: нет
Всего: 50



Цитата(scion @  15.5.2009,  14:34 Найти цитируемый пост)
почему на работает поиск по массиву:
if (@m =~ /data/)
или в перле незя так искать в массиве?
Так нельзя, но можно так:
if (grep {/data/} @m)
if ("@m" =~ /data/)


Это сообщение отредактировал(а) amg - 15.5.2009, 16:24
PM MAIL   Вверх
DaemonSuw
Дата 15.5.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



@mas=%hash - снова массив
PM MAIL ICQ   Вверх
scion
Дата 15.5.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Цитата(amg @ 15.5.2009,  16:23)
Цитата(scion @  15.5.2009,  14:34 Найти цитируемый пост)
почему на работает поиск по массиву:
if (@m =~ /data/)
или в перле незя так искать в массиве?
Так нельзя, но можно так:
if (grep {/data/} @m)
if ("@m" =~ /data/)

спасибо! а я тут мучаюсь...

Добавлено через 1 минуту и 51 секунду
Цитата(DaemonSuw @ 15.5.2009,  16:25)
@mas=%hash - снова массив

почему тогда не получается:
@mas=%hash 

print @mas[3];

как обратится к элементу массива?
PM MAIL   Вверх
DaemonSuw
Дата 15.5.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



Немного неточно: мы хотим получить просто ключи из хеша, тогда лучше так: @mas = keys(%hash);

Почитайте про массивы, хеши и обращения к ним и все станет ясно: 

к элементу массива: $mas[1]
к массиву целиком: @mas 
к хешу: $hash{'2321312'}
к всему хешу целиком: %hash 

PM MAIL ICQ   Вверх
scion
Дата 15.5.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Цитата(DaemonSuw @ 15.5.2009,  17:11)
Немного неточно: мы хотим получить просто ключи из хеша, тогда лучше так: @mas = keys(%hash);

Почитайте про массивы, хеши и обращения к ним и все станет ясно: 

к элементу массива: $mas[1]
к массиву целиком: @mas 
к хешу: $hash{'2321312'}
к всему хешу целиком: %hash

нет, я всё правильно делал....
просто после:
@mas = keys(%hash);

все данные из hash попавают в $mas[0] =( А я думал, они попадут в $mas[0] .... [n]
( грубо говоря у меня получилось в $mas[0] - profile  thunderpass library.... )
и вопросик, а как мода их засунуть не в $mas[0], а в $mas[0] - frofile, в mas[1] - thunderpass  etc...

А если я из в hash разделю символом новой строки (\n) они бут как отдельные элементы? (не как строка?)
PM MAIL   Вверх
DaemonSuw
Дата 15.5.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



Еще раз рекомендую почитать про массивы, хеши и обращения к ним, существует очень много книг =)
Вы ошибаетесь!
Цитата

все данные из hash попавают в $mas[0] =( А я думал, они попадут в $mas[0] .... [n]
( грубо говоря у меня получилось в $mas[0] - profile  thunderpass library.... )
и вопросик, а как мода их засунуть не в $mas[0], а в $mas[0] - frofile, в mas[1] - thunderpass  etc...


Код

C:\Documents and Settings\Deamon>perl -e "%hash = qw/a 1 b 2 c 3 d 4/; print %hash; @a = keys(%hash); print ' => '.$a[0].$a[1].$a[2].$a[3]";


Цитата

А если я из в hash разделю символом новой строки (\n) они бут как отдельные элементы? (не как строка?) 

не корректный вопрос... я ничего не понял! 

PM MAIL ICQ   Вверх
amg
Дата 16.5.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: нет
Всего: 50



Прочитал наконец тему с самого начала. Сплошной сумбур!

DaemonSuw,  совет по поиску в массиве, приведенный мной, оказывается, уже был дан Вами. Прошу прощения за дубль и за невнимательность.
scion, сформулируйте какую-нибудь небольшую, но конкретную задачку, нужную Вам. В ответ наверняка кем-нибудь будет предложен код, решающий эту задачку. Тогда, четко зная проблему и имея перед глазами решение, Вам будет гораздо проще разобраться в особенностях конструкций Перла и задать информативные вопросы.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0721 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.