Perl регулярка

Discussion in 'PHP' started by demonoid, 13 Apr 2007.

  1. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    Code:
    <td><a href="/users/1456036/"id="good">Username</a></td>
    Требуется через регулятивное выражение считать *1456036* в переменную.
    читал по этому поводу мануалы,мало-чего понял :(
    Посоветуйте литературу.
     
    #1 demonoid, 13 Apr 2007
    Last edited: 13 Apr 2007
  2. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    my $str = '<td><a href="/users/1456036/"id="good">Username</a></td>';
    $str =~ /(\d+)/;
    print $1;
     
  3. flipper

    flipper Elder - Старейшина

    Joined:
    5 Sep 2006
    Messages:
    131
    Likes Received:
    85
    Reputations:
    29
    $a=~/<a href="\/users\/(\d*)\/"/;
     
  4. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    А если на странице много форм
    Code:
    <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>;
    И каждую нада записать впеременную?
     
    #4 demonoid, 13 Apr 2007
    Last edited: 13 Apr 2007
  5. flipper

    flipper Elder - Старейшина

    Joined:
    5 Sep 2006
    Messages:
    131
    Likes Received:
    85
    Reputations:
    29
    Писал исходя из личного опыта, но могу порекомендовать заглянуть в избарнное->books там видел хорошие книжки по perl'у
     
  6. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Ну и на кой ляд стока лишнего?

    При условии, что сорец страницы находится в $source:
    Code:
    my @digits = $str =~ /\d+/g;
    
     
  7. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    Ох нада было сразу сказать вам всю правду ! :)
    Пытаюсь ник граббер зделать
    Вот кусок страницы

    Code:
    .........................................................
              </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*- записать в файл.
     
  8. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    Извяюсь шо заебав :) больше не буду
     
  9. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    вообщем делай сначала так $ans=~s/<[^<a href=]+>//ig; -- поидее должно снести все теги кроме <a href="/album/1454793/" id="girl">

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

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    да на*** вы чето в регесп суете, если человек говорит, что ему тупо надо числа эти в файл забросить?

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

    flipper Elder - Старейшина

    Joined:
    5 Sep 2006
    Messages:
    131
    Likes Received:
    85
    Reputations:
    29
    Code:
    #/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: подпись у топикстартера прикольная :)
     
  12. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    ну плин перл учу месяц-немогу понять я эти регулятивные выражения, а услуги спэма предоставляю добросовисно :)
     
  13. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    А теперь немного подумаем? Сколько циферок оно соберёт на странице типа:
    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
    Code:
    $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;
    Так и просто, и правильно.
     
    1 person likes this.
  14. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Незабываем, что первоначальное задание было в одной строке, с одной парой цифр. По нему я и писал.
     
  15. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Так-же не пропускаем 7-ой пост ;)
     
  16. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Не читал, тк "зае*** порционно выдавать" =\
     
    #16 KSURi, 14 Apr 2007
    Last edited by a moderator: 14 Apr 2007
  17. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    Ребята спасибо помогли разобрался :)