Просмотр полной версии : Perl регулярка
demonoid
13.04.2007, 18:20
<td><a href="/users/1456036/"id="good">Username</a></td>
Требуется через регулятивное выражение считать *1456036* в переменную.
читал по этому поводу мануалы,мало-чего понял :(
Посоветуйте литературу.
my $str = '<td><a href="/users/1456036/"id="good">Username</a></td>';
$str =~ /(\d+)/;
print $1;
$a=~/<a href="\/users\/(\d*)\/"/;
demonoid
13.04.2007, 18:58
$a=~/<a href="\/users\/(\d*)\/"/;
А если на странице много форм
<td><a href="/users/1456031/"id="good">Username</a></td>;
<td><a href="/users/1456032/"id="good">Username</a></td>;
<td><a href="/users/1456033/"id="good">Username</a></td>;
И каждую нада записать впеременную?
Писал исходя из личного опыта, но могу порекомендовать заглянуть в избарнное->books там видел хорошие книжки по perl'у
$a=~/<a href="\/users\/(\d*)\/"/;
Ну и на кой ляд стока лишнего?
При условии, что сорец страницы находится в $source:
my @digits = $str =~ /\d+/g;
demonoid
13.04.2007, 19:56
Ох нада было сразу сказать вам всю правду ! :)
Пытаюсь ник граббер зделать
Вот кусок страницы
.................................................. .......
</tr>
<tr class="caption_bg">
<td><a href="/album/1447593/" id="girl">╬ы№ур</a></td>
<td>╙ъЁршэр, ╩шхт</td>
<td>56</td>
<td>ыхт</td>
<td><span class="larger">-</span></td>
<td><span class="larger">-</span></td>
</tr>
<tr class="caption">
<td><a href="/album/1454793/" id="girl">╩рЄ*</a></td>
<td>╙ъЁршэр, ╩шхт</td>
<td>17</td>
<td>ёъюЁяшюэ</td>
<td><span class="larger">-</span></td>
<td><span class="larger">-</span></td>
</tr>
<tr class="caption_bg">
<td><a href="/album/1456036/" id="girl">└ышэр</a></td>
<td>╙ъЁршэр, ╩шхт</td>
<td>13</td>
<td>ыхт</td>
<td><span class="larger">+</span></td>
<td><span class="larger">-</span></td>
</tr>
....................
Надо эти значения-*1456036*,*1454793*,*1447593*- записать в файл.
demonoid
13.04.2007, 20:09
Извяюсь шо заебав :) больше не буду
вообщем делай сначала так $ans=~s/<[^<a href=]+>//ig; -- поидее должно снести все теги кроме <a href="/album/1454793/" id="girl">
а дальше уже как было показано выше только в цикле
да на*** вы чето в регесп суете, если человек говорит, что ему тупо надо числа эти в файл забросить?
# $html - тут сорец страницы
my @nums = $html =~ /\d+/g;
open(OUT, '>', 'out.txt') || die $!;
print OUT join("\n", @nums);
close OUT;
#/usr/bin/perl -w
open(FIL, "<file.html");
open(SUC, ">SUCCESS.txt");
@fil=<FIL>;
foreach $str(@fil) {
if ($str=~m/<a href="\/album\/(\d+)\/"/) {
push (@URLS,"$1\n");
}}
print SUC @URLS;
close (FIL);
close (SUC);
ps: подпись у топикстартера прикольная :)
demonoid
13.04.2007, 22:23
ps: подпись у топикстартера прикольная :)
ну плин перл учу месяц-немогу понять я эти регулятивные выражения, а услуги спэма предоставляю добросовисно :)
да на*** вы чето в регесп суете, если человек говорит, что ему тупо надо числа эти в файл забросить?
# $html - тут сорец страницы
my @nums = $html =~ /\d+/g;
open(OUT, '>', 'out.txt') || die $!;
print OUT join("\n", @nums);
close OUT;
А теперь немного подумаем? Сколько циферок оно соберёт на странице типа:<td><input type="radio" name="iconid" value="12" id="rb_iconid_12" tabindex="1" onclick="swap_posticon('pi_12')" /></td>
<td width="12%"><label for="rb_iconid_12"><img src="images/icons/icon12.gif" alt="Wink" id="pi_12" onclick="rb_iconid_12.click()" /></label></td>
<td><input type="radio" name="iconid" value="11" id="rb_iconid_11" tabindex="1" onclick="swap_posticon('pi_11')" /></td>
<td width="12%"><label for="rb_iconid_11"><img src="images/icons/icon11.gif" alt="Red face" id="pi_11" onclick="rb_iconid_11.click()" /></label></td>
<td><input type="radio" name="iconid" value="10" id="rb_iconid_10" tabindex="1" onclick="swap_posticon('pi_10')" /></td>
<td width="12%"><label for="rb_iconid_10"><img src="images/icons/icon10.gif" alt="Talking" id="pi_10" onclick="rb_iconid_10.click()" /></label></td>
<td><input type="radio" name="iconid" value="9" id="rb_iconid_9" tabindex="1" onclick="swap_posticon('pi_9')" /></td>
<td width="12%"><label for="rb_iconid_9"><img src="images/icons/icon9.gif" alt="Unhappy" id="pi_9" onclick="rb_iconid_9.click()" /></label></td>А ведь ему явно задано, что циферки должны находиться внутри href$xxx = '
<td><a href="/users/1456031/"id="good">Username</a></td>;
<td><a href="/users/1456032/"id="good">Username</a></td>;
<td><a href="/users/1456033/"id="good">Username</a></td>;
';
@yyy = $xxx =~ m#<a href="/users/(\d+)/"#gi;
open(OUT, '>', 'out.txt')|| die $!;
print OUT join "\n", @yyy;
close OUT;Так и просто, и правильно.
А теперь немного подумаем? Сколько циферок оно соберёт на странице типа:<td><input type="radio" name="iconid" value="12" id="rb_iconid_12" tabindex="1" onclick="swap_posticon('pi_12')" /></td>
<td width="12%"><label for="rb_iconid_12"><img src="images/icons/icon12.gif" alt="Wink" id="pi_12" onclick="rb_iconid_12.click()" /></label></td>
<td><input type="radio" name="iconid" value="11" id="rb_iconid_11" tabindex="1" onclick="swap_posticon('pi_11')" /></td>
<td width="12%"><label for="rb_iconid_11"><img src="images/icons/icon11.gif" alt="Red face" id="pi_11" onclick="rb_iconid_11.click()" /></label></td>
<td><input type="radio" name="iconid" value="10" id="rb_iconid_10" tabindex="1" onclick="swap_posticon('pi_10')" /></td>
<td width="12%"><label for="rb_iconid_10"><img src="images/icons/icon10.gif" alt="Talking" id="pi_10" onclick="rb_iconid_10.click()" /></label></td>
<td><input type="radio" name="iconid" value="9" id="rb_iconid_9" tabindex="1" onclick="swap_posticon('pi_9')" /></td>
<td width="12%"><label for="rb_iconid_9"><img src="images/icons/icon9.gif" alt="Unhappy" id="pi_9" onclick="rb_iconid_9.click()" /></label></td>А ведь ему явно задано, что циферки должны находиться внутри href$xxx = '
<td><a href="/users/1456031/"id="good">Username</a></td>;
<td><a href="/users/1456032/"id="good">Username</a></td>;
<td><a href="/users/1456033/"id="good">Username</a></td>;
';
@yyy = $xxx =~ m#<a href="/users/(\d+)/"#gi;
open(OUT, '>', 'out.txt')|| die $!;
print OUT join "\n", @yyy;
close OUT;Так и просто, и правильно.
Незабываем, что первоначальное задание было в одной строке, с одной парой цифр. По нему я и писал.
Незабываем, что первоначальное задание было в одной строке, с одной парой цифр. По нему я и писал.Так-же не пропускаем 7-ой пост ;)
Так-же не пропускаем 7-ой пост ;)
Не читал, тк "зае*** порционно выдавать" =\
demonoid
14.04.2007, 00:49
Ребята спасибо помогли разобрался :)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot