Нужна помощь с регуляркой

Тема в разделе "Регулярные выражения", создана пользователем Ruslanych, 21 сен 2011.

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

    Ruslanych Создатель

    Регистр.:
    17 фев 2009
    Сообщения:
    37
    Симпатии:
    8
    Помогите плиз.
    Есть текст:
    HTML:
    
    <div class="Container">
    <a style="text-decoration: none;" href="LINK1">
    <div id="highlight-12" onmouseover="showTrackers('inline'); setYear(12)" 
    class="activeHighlight">2008</div>
    </a>
    </div>
    
    В результате нужно получить LINK1 2008.
    LINK1 2008 - переменные.
    Заранее благодарен.
     
  2. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    ВЫ неполно описали задачу, а именно, на что из ващего кода надо привязыватся
    впрочем как и язык реализации
    ПОпробую угадать(синтаксис PHP:(
    первая ссылка внутри <div class="Container">
    Код:
    /<div class="Container">.*<a[^>]*href="([^"]*)"/sU
    
    первый DIV внутри <div class="Container">, у которого ID начинается на highlight-
    Код:
    /<div class="Container">.*<div id="highlight-[^>]*>([^<]*)<"/sU
    
     
  3. Ruslanych

    Ruslanych Создатель

    Регистр.:
    17 фев 2009
    Сообщения:
    37
    Симпатии:
    8
    Язык php.
    Регулярка нужна для функции preg_match_all.
    В результате нужно получить массив строк вида: LINK1 2008.
     
  4. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    PHP:
    <?php
    $cod 
    "<div class=\"Container\">
    <a style=\"text-decoration: none;\" href=\"LINK1\">
    <div id=\"highlight-12\" onmouseover=\"showTrackers('inline'); setYear(12)\" 
    class=\"activeHighlight\">2008</div>
    </a>
    </div>"
    ;
    preg_match('/href=\"(.*?)\">.*activeHighlight\">(.*?)<\/div>/si',$cod,$match);
    echo 
    $match[1]." ".$match[2]; //LINK1 2008
     
    Ruslanych нравится это.
  5. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
  6. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    mcdir
    Прежде чем давать такие советы, может стоит упоминать о не достатках этого решения по сравнению с ергулярками?
    То, что оно проще, и позволяет отключить мозги - не означает что оно лучше
     
  7. Ruslanych

    Ruslanych Создатель

    Регистр.:
    17 фев 2009
    Сообщения:
    37
    Симпатии:
    8
    Данное решение не подходит, поскольку в документе есть ссылки с другой структурой и т.д.
     
  8. x-3-m

    x-3-m Создатель

    Регистр.:
    13 июн 2007
    Сообщения:
    11
    Симпатии:
    0
    Для его задачи в самый раз, удобнее и быстрее обходить DOM структуру чем писать регулярные выражения, хотя изобретать велосипед право каждого

    Добавлено через 3 минуты
    обращение идет к элементу <a и извлекается содержимое href, и тут все равно какая структура ссылки

    Вот пример из доков, выводит url ссылок ($element->href)
    // Создаем объект DOM на основе кода, полученного по ссылке
    $html = file_get_html('http://site/');

    // находим все ссылки
    foreach($html->find('a') as $element)
    echo $element->href .' ('. $element->innertext. ')<br>';
     
  9. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
    для тех кто не в теме
    банальная ПРАВИЛЬНАЯ регулярка для поиска емеила в тексте занимает страницу кода
    в simplehtmldom уже написано куча ПРОВЕРЕННЫХ регулярок для работы с домом
    проще написать пару тройку шаблонов на ней, чем не зная синтаксиса регулярак просить написать универсальную, не предоставляя других вариантов на которых предложенные выше регулярки могут поломаться
    имхо


    ps и вообще парсеры - это искусство, поетому и регулярка и шаблоны будут устаревать сразу с изменением контента,и к этому нужно привыкнуть.
     
Статус темы:
Закрыта.