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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> grep помещает всю строку в элемент массива [0], а мне надо чтоб по кускам в разные элем. 
:(
    Опции темы
alexandra231525480
Дата 3.10.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте уважаемые онлайновые духи!
задача: из хтмл-кода страницы выкусить из строчки число: 
Код

<td class="width25pc" nowrap="nowrap">Всего запросов к счетчику:</td>
<td class="width1pc"><b>133`371`764</b></td>
<td>&nbsp;</td>
</tr>
<tr class="caption_bg">
<td nowrap="nowrap">Всего посещений сайта:</td>

в php сделала вот так:
Код

$page=".../tmp.txt";
$html = implode('', file ($page));
$mas= array();
$html = preg_match_all("#Всего\sзапросов\sк\sсчетчику:(.+?)Всего\s#s", $html, $mas);
//print_r ($mas);
echo $mas[1][0];

Все вроде бы и ничего, только это теперь нужно провернуть в перле, которого я практически не знаю..
я пробую делать вот так:
Код

open(SAMP, ".../tmp.txt"); 
@str=<SAMP>;
@mas = grep {m/$'(<td class="width1pc"><b>)(\d+)/} @str;
print $mas[0];
close SAMP;

впоследствии чего вся строчка 
Код
<td class="width1pc"><b>133`371`764</b></td>

записывается в элемент массива [0].  УМОЛЯЮ, скажите, как сделать так, чтобы куски регекспа записывались в разные элементы массива? может там вообще не grep надо использовать?.....
просто брать и сплитить полученную строку считаю абсолютно нелогичным, так как уверена в существовании возможности сразу все разбить на части.
Заранее благодарна.
PM MAIL   Вверх
alexandra231525480
Дата 3.10.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile 
а я уже и сама придумала:
Код

@mas = $htm =~ m/(?<=<td class="width1pc"><b>)[\d+`]+(?=\D)/g; 

теперь прошу сильных мира сего лишь одобрить или неодобрить smile
PM MAIL   Вверх
nitr
Дата 4.10.2006, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



вот простое решение:
Код

#!perl
use strict;

open my $flh, "<", "tmp.txt" or die $!;
local $/;
my $content = <$flh>;
close $flh;
$content =~ /<td class="width1pc"><b>([\d`]+)/smg;
print $1;

зачем далее проверять? ты же создала класс [\d`] это цифра либо ` smile т.е. </b... точно не входит ;)

Добавлено @ 00:15 
всё что заключаешь в (..) соотвествнно являются переменными $1, $2 и т.д. smile
надеюсь мой пример ясен?


--------------------
PM   Вверх
alexandra231525480
Дата 4.10.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



очень даже ясен! большое спасибо! только вот один момент - что значат 3 символа подряд в конце строки:
Код

$content =~ /<td class="width1pc"><b>([\d`]+)/smg;
 
?
PM MAIL   Вверх
GoodBoy
Дата 4.10.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



ну первые 2 модификатора - вообще взаимоисключающие... :-)))

s - однострочная переменная
m - многострочная переменная
g - глобальный поиск - т.е. поиск всех вхождений, а не только первого


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
alexandra231525480
Дата 4.10.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ага, то есть то, что я и думала smile) СПАСИБО!!!
PM MAIL   Вверх
nitr
Дата 4.10.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



Цитата(GoodBoy @  4.10.2006,  10:31 Найти цитируемый пост)
ну первые 2 модификатора - вообще взаимоисключающие... :-)))

GoodBoy, они друг друга дополняющие ;)




--------------------
PM   Вверх
GoodBoy
Дата 4.10.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Цитата(nitr @  4.10.2006,  11:41 Найти цитируемый пост)
они друг друга дополняющие 

ну а теперь попробуй мне объяснить - каким образом??  smile Если учесть, что s говорит о том, что в сопоставляемом тексте нет перевода строки, а m говорит, что в тексте есть 1 или более переводов строки...


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
amg
Дата 4.10.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата
s — метасимволу «точка» разрешено соответствовать символам \п.
m — разрешает метасимволам ^ и $ привязываться к промежуточным символам \n, имеющимся в тексте. Не влияет на работу метасимволов \А, \Z и \z.
 Примерно то же самое написано в perldoc perlre.

Т.е. модификаторы s и m, вообще говоря, друг друга не исключают.
Другое дело, что метасимволов, на работу которых они влияют, в обсуждаемом регулярном выражении нет.
PM MAIL   Вверх
GoodBoy
Дата 4.10.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



по хорошему, в данном конкретном примере из smg вообще только g и нужен-то...


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
nitr
Дата 4.10.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



GoodBoy, ей не помешает ;)
Просто более универсальное решение... как уже многие тут приводили...
Вообще решений этого вопроса много ;) ... перлгольф?


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


Эксперт
***


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

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



Цитата(nitr @  4.10.2006,  15:44 Найти цитируемый пост)
перлгольф?
С удовольствием! Надо только четко сформулировать задачу.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




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


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

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