Распарсивание ссылки

Тема в разделе "Регулярные выражения", создана пользователем LEXAlForpostl, 25 июл 2009.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Здравствуйте.
    Подскажите пожалуйста, имеем ссылку вида
    < a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" и тут ещё куча всего> Notebook Acer</a>.
    Необходимо вывести все название с их ID'шками.
    Notebook Acer - 363809
    Текст находится в переменной $html
    Буду безмерно благодарен за РНРшный скрипт.
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    PHP:
    <?php

    // ...
    preg_match('%<a href="/products\.php\?product_id=(\d+)#.+?" title="(.+?)".+?</a>%'$html$tmp);
    $id=$tmp[1];
    $title=$tmp[2];
    echo 
    $title.' '.$id;
    ?>
     
    LEXAlForpostl нравится это.
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Писал с помощью preg_match_all
    Ничего не нашёл.
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    preg_match_all по другому возвращает массив с результатом. Достаточно сделать print_r чтобы понять что к чему
    PHP:
    Array
    (
        [
    0] => Array
            (
                [
    0] => <a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" и тут ещё куча всегоNotebook Acer</a>
                [
    1] => <a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" и тут ещё куча всегоNotebook Acer</a>
            )
        [
    1] => Array
            (
                [
    0] => 363809
                
    [1] => 363809
            
    )
        [
    2] => Array
            (
                [
    0] => Notebook Acer
                
    [1] => Notebook Acer
            
    )
    )
    Хотя для all удобнее применять PREG_SET_ORDER -
    PHP:
    preg_match_all('%<a href="/products\.php\?product_id=(\d+)#.+?" title="(.+?)".+?</a>%'$html$tmpPREG_SET_ORDER); 
    Array
    (
        [
    0] => Array
            (
                [
    0] => <a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" и тут ещё куча всегоNotebook Acer</a>
                [
    1] => 363809
                
    [2] => Notebook Acer
            
    )
        [
    1] => Array
            (
                [
    0] => <a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" и тут ещё куча всегоNotebook Acer</a>
                [
    1] => 363809
                
    [2] => Notebook Acer
            
    )
    )
     
     
     
     
    cahxah7E нравится это.
  5. cahxah7E

    cahxah7E Создатель

    Регистр.:
    3 фев 2009
    Сообщения:
    12
    Симпатии:
    1
    возможно надо попробовать добавить модификатор "m" в паттерн
    меня несколько раз спасало:
    PHP:
    $html = <<<EOF
    <a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" и тут ещё куча всего> Notebook Acer</a>
    <a href="/products.php?product_id=363810#product_363810" title="Notebook Bd" и тут ещё куча всего> Notebook Bd</a>
    EOF;

    preg_match_all'!product_id=(\d+).+title="(.+)"!m'$html$match );
    print_r$match );
     
Статус темы:
Закрыта.