Помогите пожалуйста с регуляркой

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by egorea1999, 26 Jun 2013.

  1. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    нужно чтобы из такой строки: <h1>2 x <a href="/story.php?title=War-Thunder_1000-%D0%97%D0%BE%D0%BB%D0%BE%D1%82%D1%8B%D1%85-%D0%BE%D1%80%D0%BB%D0%BE%D0%B2">War Thunder - 1000 Золотых орлов</a></h1>
    вырезалось только это(парсилось регуляркой): War Thunder - 1000 Золотых орлов

    есть такая регулярка: <h1>(.*?)</a></h1> , но к сожалению он парсит только так:
    Code:
    2 x <a href="/story.php?title=War-Thunder_1000-%D0%97%D0%BE%D0%BB%D0%BE%D1%82%D1%8B%D1%85-%D0%BE%D1%80%D0%BB%D0%BE%D0%B2">War Thunder - 1000 Золотых орлов
     
  2. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    он только орлов парсит :(


    там и не только они,а ещё и:

    <h1><a href="/story.php?title=War-Thunder_%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF-%D0%B2-%D0%91%D0%B5%D1%82%D0%B0-%D1%82%D0%B5%D1%81%D1%82">War Thunder - Доступ в Бета-тест</a></h1>
     
  3. egorea1999

    egorea1999 New Member

    Joined:
    4 Dec 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Вот html код страницы: http://rghost.ru/private/47022907/6e16a78318da56c52f7cb7dc57ca8757
     
  4. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Скачать исходник почему-то не могу. Но регулярка вот:
    <a href="\/story\.php\?title=\S*?">(.*?)</a></h1>

    в reg.match[1] будет искомая строка
    P.S. подправил, чтобы не все ссылки со страницы разобрало, а только которые начинаются со /story.php
     
    #4 xophet, 26 Jun 2013
    Last edited: 26 Jun 2013
  5. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    ерунда полнейшая. твоя регулярка сработает один раз от первого
    <h1><a href="
    до последнего
    ">
    а отсюда - до последнего
    </a></h1>

    Зачем подсказывать, если не знаешь/не умеешь?
     
    1 person likes this.
  6. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Разбирай с помощью mshtml, парсить HTML плохой тон.
     
    _________________________
    1 person likes this.
  7. smartmobi

    smartmobi New Member

    Joined:
    29 Jun 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    твоя тоже сработает до </a></h1>
    <h1>2 x <a href=\"\/story\.php\?title=.*\">(.*)<\/a><\/h1>
     
  8. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    ага, даже и не вздумай - в высший свет не примут )
     
  9. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    GhostOnline, напишешь релиз продашь его допустим, а новый верстальщик Василий Пупкин откроет в редакторе шаблон и исправит кавычки с двойных на одинарные в атрибутах, а потом поменяет местами href и title, на которые ты опирался в регулярке и нечаянно нажмет клавишу tab или enter между ними...

    Используя DOM парсер о всяких нештатных ситуациях беспокоится не приходится.
     
    _________________________
    #9 Gar|k, 4 Jul 2013
    Last edited: 4 Jul 2013
  10. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Gar|k то что ты пишешь это очевидные вещи. проблема в том. в программировании нет абсолютной истины. и нельзя отказываться от использования регулярок только потому, что так якобы не принято. что если я пишу парсер не для продажи, а для разового использования, для себя? ты не знаешь ситуацию ТСа но даешь однозначный и категоричный совет.
    ну и добавлю что регулярки можно писать писать по-разному. есть "более устойчивые" и "менее устойчивые" к изменениям. у меня бывало что регулярки и через год работали как надо, при наличии изменений в верстке. но в целом соглашусь что применять html-парсеры в целом более правильно, и к этому в идеале надо стремиться. только вот в программировании стрмеление к идеалу во всем - зло, тут я соглашусь с твоей сигнатурой.
    все перечисленное кстати не всегда может обернуться проблемой. опять же зависит от регулярки.
     
  11. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    GhostOnline это форум как бы не для гуру программирования (у них вопросов не возникает хех), думаю здесь нужно давать новичкам правильные советы к которым "надо стремиться". Воооот. Ну а так ты все правильно сказал, для себя можно и на ассемблере парсер написать (который грабит караваны), к тому же я не запрещал ТС использовать регулярки просто обозначил что это "плохой тон", а почему - расписал тебе в ответе :)
     
    _________________________
  12. fata_l

    fata_l New Member

    Joined:
    24 Aug 2012
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0

    Ну правильно что оно так парсит, У тебя такая же регулярка, сделай
    ">(.*?)</a></h1>

    Ну или

    <h1>(.*?)">(.*?)</a></h1> и отсюда бери 2ое значение! > RegExp.Match[1];