Помогите с регулярный выражением на PHP

Discussion in 'PHP' started by UnOuter, 1 Sep 2009.

  1. UnOuter

    UnOuter New Member

    Joined:
    24 Jul 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, уважаемые программисты.

    Помогите составить регулярку на PHP для такого:

    имеем
    Code:
    <b>Линки</b></a><hr><a href="\http://site.ru/id.php?key=523169210347762514824620110374859\" class="\&quot;takru\&quot;" target="\&quot;_top\&quot;" onclick='\"javascript:' rnd(this);\="">
    в итоге должны получить

    Code:
    http://site.ru/id.php?key=523169210347762514824620110374859
    

    В общем извлечь ссылку из текста
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <pre>
    <?php
    $a 
    = <<<HTML
    <b>Линки</b></a><hr><a href="\http://site.ru/id.php?key=523169210347762514824620110374859\" class="\&quot;takru\&quot;" target="\&quot;_top\&quot;" onclick='\"javascript:' rnd(this);\="">
    "
    HTML;
    preg_match_all('|<b>Линки</b></a><hr><a href="\\\(.*)\\\" class="|',$a,$res);
    print_r ($res[1]);
    ?>
    </pre>
     
    #2 Pashkela, 1 Sep 2009
    Last edited: 1 Sep 2009
    1 person likes this.
  3. UnOuter

    UnOuter New Member

    Joined:
    24 Jul 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Спасибо, но мне кажется он немного не универсальный. То есть стоит поменяться какому-то тегу то ссылку я уже не извлеку. Хотелось бы более универсальные решения.

    Спасибо.
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    оставь тогда внутри регулярки только

    <a href="\\\(.*)\\\

    и всё

    < ahref ведь не поменяется? А вообще, прежде чем спрашивать, надо давать сразу все возможные варианты, а не только одну строчку, по идее
     
  5. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    сосайтнек, а что если будет <a target="_blank" href="http://google.com">.. ? даже если когда будет hREf , тоже не будет результата.
    зачем такую "строгую" регулярку делать? будь попроще и делай более универсальные..

    UnOuter:
    /<a.+?href="(.+?)"/is
     
    1 person likes this.
  6. UnOuter

    UnOuter New Member

    Joined:
    24 Jul 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0

    Вставил сюда

    preg_match_all ("/<a.+?href="(.+?)"/is", $str , $massiv);

    и получаю ошибку.
    Parse error: syntax error, unexpected '(' in ....


    да и заметте, что в самом <a href=" есть %5C%22 как в начале так и в конце ссылки
     
    #6 UnOuter, 2 Sep 2009
    Last edited: 2 Sep 2009
  7. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    preg_match_all ('/<a.+?href="(.+?)"/is', $str , $massiv);
     
  8. Tigger

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

    Joined:
    27 Aug 2007
    Messages:
    936
    Likes Received:
    527
    Reputations:
    204
    UnOuter
    ошибка из-за ковычек!
     
  9. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    PHP:
         $a '
         dasasdlad jlalsdasd asdloaim dasd 
         asd adsda d <a href="google.com">asdqwd aoldm aikjqld qw
         as<a          href=\'google2.com\'    >d a sd aksudmqid jlasdq d wqd aw
          al;sd ;<A hReF="gOgOlE3.cOm">askd aksd mpqdio aksldj qd
         '
    ;
         print 
    htmlspecialchars($a).'<br><br>';
         
    preg_match_all ("/<a.+?href=[\"'](.+?)[\"']/is"$a $m);
         print 
    '<pre>';
         
    var_dump($m[1]);
         print 
    '</pre>';
    Code:
    dasasdlad jlalsdasd asdloaim dasd asd adsda d <a href="google.com">asdqwd aoldm aikjqld qw as<a href='google2.com' >d a sd aksudmqid jlasdq d wqd aw al;sd ;<A hReF="gOgOlE3.cOm">askd aksd mpqdio aksldj qd 
    
    array(3) {
      [0]=>
      string(10) "google.com"
      [1]=>
      string(11) "google2.com"
      [2]=>
      string(11) "gOgOlE3.cOm"
    }