![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
ochkasty |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 9.2.2011 Репутация: нет Всего: нет |
Нужно посчитать сколько раз в html-файле встречается эта комбинация:
((^\<tr\sclass\=ltr\>$^\<td\>)|(^\<tr\>$^\<td\>)|(^\<tr\>$^\<td\sclass\=port\>))B\# (Данный набор использовал в плагине "Search and Replace" для FAR manager, поэтому сильно не пинайте, если где-то ошибся). Умею только читать файл целиком:
После этого, в переменной $str получаю полное содержимое файла xcn_156.htm. Что с ним потом делать? Спасибо. Это сообщение отредактировал(а) ochkasty - 16.2.2011, 15:08 |
|||
|
||||
Grost |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 26.8.2010 Где: Москва Репутация: нет Всего: нет |
А почему бы сразу во время считывания данных не поставить счётчик с условием?
PS. хотя может не совсем понял, что требуется ![]() |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
$cnt = () = $str =~ m#\Q((^\<tr\sclass\=ltr\>$^\<td\>)|(^\<tr\>$^\<td\>)|(^\<tr\>$^\<td\sclass\=port\>))B\\\#\E#g
Это сообщение отредактировал(а) arto - 16.2.2011, 17:27 |
|||
|
||||
ochkasty |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 9.2.2011 Репутация: нет Всего: нет |
Да, можно сразу во время считывания. Как? Подскажи, пожалуйста. |
|||
|
||||
Grost |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 26.8.2010 Где: Москва Репутация: нет Всего: нет |
возможно так, если считывать построчно:
либо сначала разбить на строки потом обрабатывать:
Только я регулярку может не правильно переписал ![]() А вообще у arto, вариант лучше будет. Это сообщение отредактировал(а) Grost - 17.2.2011, 10:47 |
||||
|
|||||
ochkasty |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 9.2.2011 Репутация: нет Всего: нет |
Да, этот вариант вполне удобен. Спасибо. Однако, здесь, почему-то, не ищется символ начала строки: $cnt = () = $str =~ m/^\<tr/g; -- говорит, что таких вхождений нет. Хотя точно есть. Я смотрел по F4. Почему? |
|||
|
||||
alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
$cnt = () = $str =~ m/^\<tr/gm
|
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
потому как \Q
либо напишите правильный regexp, либо расскажите руками, что вам надо найти. |
|||
|
||||
ochkasty |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 9.2.2011 Репутация: нет Всего: нет |
Мне нужно посчитать количество таких вхождений: - первая строка: пустая - вторая строка полностью: <tr class=ltr> или <tr> - третья строка начинается с: <td>B# или <td class=port>B#
или
или
Пошел от простого к сложному: $cnt = () = $str =~ m/^\<tr\sclass\=ltr\>$/gm; -- такую строку нахожу $cnt = () = $str =~ m/^\<tr\sclass\=ltr\>$^\<td\>/gm; -- а такую уже нет. Как обозначить перенос строки в регекспе? |
||||||||
|
|||||||||
alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
$^ -- это переменная в перл.
$cnt = () = $str =~ m/^<tr class=ltr>\n^<td>/gm; |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perl -0777 -lne 'my $cnt = () = m/\n(?:<tr>|<tr\s+class=ltr>)\n(?:<td>|<td\s+class=port>)B#/gs; print $cnt' file
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |