Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Perl регулярка (https://forum.antichat.xyz/showthread.php?t=37879)

demonoid 13.04.2007 18:20

Perl регулярка
 
Код:

<td><a href="/users/1456036/"id="good">Username</a></td>
Требуется через регулятивное выражение считать *1456036* в переменную.
читал по этому поводу мануалы,мало-чего понял :(
Посоветуйте литературу.

KSURi 13.04.2007 18:37

my $str = '<td><a href="/users/1456036/"id="good">Username</a></td>';
$str =~ /(\d+)/;
print $1;

flipper 13.04.2007 18:47

$a=~/<a href="\/users\/(\d*)\/"/;

demonoid 13.04.2007 18:58

Цитата:

Сообщение от flipper
$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>;

И каждую нада записать впеременную?

flipper 13.04.2007 19:07

Писал исходя из личного опыта, но могу порекомендовать заглянуть в избарнное->books там видел хорошие книжки по perl'у

KSURi 13.04.2007 19:48

Цитата:

$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

Извяюсь шо заебав :) больше не буду

genom-- 13.04.2007 20:15

вообщем делай сначала так $ans=~s/<[^<a href=]+>//ig; -- поидее должно снести все теги кроме <a href="/album/1454793/" id="girl">

а дальше уже как было показано выше только в цикле

KSURi 13.04.2007 20:32

да на*** вы чето в регесп суете, если человек говорит, что ему тупо надо числа эти в файл забросить?

Код:

# $html - тут сорец страницы
my @nums = $html =~ /\d+/g;
open(OUT, '>', 'out.txt') || die $!;
print OUT join("\n", @nums);
close OUT;


flipper 13.04.2007 21:22

Код:

#/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

Цитата:

Сообщение от flipper
ps: подпись у топикстартера прикольная :)

ну плин перл учу месяц-немогу понять я эти регулятивные выражения, а услуги спэма предоставляю добросовисно :)

hidden 14.04.2007 00:04

Цитата:

Сообщение от KSURi
да на*** вы чето в регесп суете, если человек говорит, что ему тупо надо числа эти в файл забросить?

Код:

# $html - тут сорец страницы
my @nums = $html =~ /\d+/g;
open(OUT, '>', 'out.txt') || die $!;
print OUT join("\n", @nums);
close OUT;


А теперь немного подумаем? Сколько циферок оно соберёт на странице типа:
PHP код:

<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;

Так и просто, и правильно.

KSURi 14.04.2007 00:18

Цитата:

Сообщение от hidden
А теперь немного подумаем? Сколько циферок оно соберёт на странице типа:
PHP код:

<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;

Так и просто, и правильно.

Незабываем, что первоначальное задание было в одной строке, с одной парой цифр. По нему я и писал.

hidden 14.04.2007 00:21

Цитата:

Сообщение от KSURi
Незабываем, что первоначальное задание было в одной строке, с одной парой цифр. По нему я и писал.

Так-же не пропускаем 7-ой пост ;)

KSURi 14.04.2007 00:28

Цитата:

Сообщение от hidden
Так-же не пропускаем 7-ой пост ;)

Не читал, тк "зае*** порционно выдавать" =\

demonoid 14.04.2007 00:49

Ребята спасибо помогли разобрался :)


Время: 17:09