За последние 24 часа нас посетили 18992 программиста и 1618 роботов. Сейчас ищет 971 программист ...

Регулярка

Тема в разделе "PHP для новичков", создана пользователем allowance, 8 фев 2011.

  1. allowance

    allowance Активный пользователь

    С нами с:
    19 янв 2010
    Сообщения:
    196
    Симпатии:
    0
    Не могу вытащить часть ссылок:
    <a class='test ' href='/test.php?item=1vsdu6y'>Просмотр</a>
    <a class='test ' href='/test.php?item=2estt3x'>Просмотр</a>
    <a class='test ' href='/test.php?item=3rshj8u'>Просмотр</a>

    Использовал такое рег. выражение:
    Код (Text):
    1. preg_match_all("#(?<=\/test.php\?item=)\d+(?='>)#i", $out, $part_url);
    По идеи должно подцепиться(но не работает):
    1vsdu6y
    2estt3x
    3rshj8u

    Хотя, лучше было бы подцепить это:
    /test.php?item=1vsdu6y
    /test.php?item=2estt3x
    /test.php?item=3rshj8u

    Примерно как то так должно быть?
    Код (Text):
    1. preg_match_all("#(?<='test ' href=')\d+(?='>)#i", $out, $part_url);
     
  2. Jampire

    Jampire Активный пользователь

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    PHP:
    1. <?php
    2.  
    3. $str = "<a class='test' href='/test.php?item=1vsdu6y'>Просмотр</a>";
    4. preg_match('/href=\'(\/test\.php\?item=\w+)\'/s', $str, $matches);
    5. echo matches[1];
    6.  
    7. ?>
     
  3. allowance

    allowance Активный пользователь

    С нами с:
    19 янв 2010
    Сообщения:
    196
    Симпатии:
    0
    Jampire
    работает -
    href='/test.php?item=1vsdu6y'
    А как захватить только /test.php?item=1vsdu6y ?
     
  4. Jampire

    Jampire Активный пользователь

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    allowance
    Там в коде очепятка. Не дописал знак $ перед matches[1].
     
  5. allowance

    allowance Активный пользователь

    С нами с:
    19 янв 2010
    Сообщения:
    196
    Симпатии:
    0
    Jampire
    Дело не в этом, ваша регулярка работает но она захватывает href='/test.php?item=1vsdu6y'
    А как захватить только /test.php?item=1vsdu6y ?
     
  6. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    вместо echo matches[1]; поставь echo '<pre>'.print_r($matches, true).'</pre>';
    и увидишь Ъ. а если не увидишь - значит не дано. аминь
     
  7. allowance

    allowance Активный пользователь

    С нами с:
    19 янв 2010
    Сообщения:
    196
    Симпатии:
    0
    Gromo
    Ой, cпасибо, разобрался! :)
     
  8. allowance

    allowance Активный пользователь

    С нами с:
    19 янв 2010
    Сообщения:
    196
    Симпатии:
    0
    Gromo
    Array
    (
    [0] => Array
    (
    [0] => 'test ' href='/test.php?item=1vsdu6y'
    [1] => 'test ' href='/test.php?item=2estt3x'
    [2] => 'test ' href='/test.php?item=3rshj8u'
    )

    [1] => Array
    (
    [0] => /deal.php?item=1vsdu6y
    [1] => /deal.php?item=2estt3x
    [2] => /deal.php?item=3rshj8u
    )

    )
    Подцепляются 3 нужные ссылки
    preg_match_all('/\'test \' href=\'(\/test\.php\?item=\w+)\'/s', $str, $matches);

    echo $matches[1][1]; - ничего не выводит :-(

    А должно выводится - /deal.php?item=2estt3x
     
  9. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ну, у меня всё прекрасно выводится:
    PHP:
    1.  
    2. <?php
    3.  
    4. $str = "<a class='test ' href='/test.php?item=1vsdu6y'>Просмотр</a>
    5. <a class='test ' href='/test.php?item=2estt3x'>Просмотр</a>
    6. <a class='test ' href='/test.php?item=3rshj8u'>Просмотр</a>";
    7. preg_match_all('/href=\'(\/test\.php\?item=\w+)\'/s', $str, $matches);
    8. echo '<pre>'.print_r($matches, true).'</pre>';
    9. echo $matches[1][1];
    10.  
    11. ?>
    12.  
     
  10. Jampire

    Jampire Активный пользователь

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    Странно все это...
    PHP:
    1. <?php
    2.  
    3. $str = "<a class='test' href='/test.php?item=1vsdu6y'>Просмотр</a>";
    4. preg_match('/href=\'(\/test\.php\?item=\w+)\'/s', $str, $matches);
    5. echo "<pre>";
    6. print_r($matches);
    7. echo "</pre>";
    8.  
    9. ?>
    Код (Text):
    1. Array
    2. (
    3.     [0] => href='/test.php?item=1vsdu6y'
    4.     [1] => /test.php?item=1vsdu6y
    5. )
    Явно проблемы у вас. Показывайте весь код скрипта.