[C#] Помочь с регулярными

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by noxjoker, 30 Sep 2016.

  1. noxjoker

    noxjoker Member

    Joined:
    7 Aug 2009
    Messages:
    189
    Likes Received:
    24
    Reputations:
    0
    Вообщем стоит такая задача. Нужно написать регулярное выражение.

    Текст:
    <td class='lol'><a href="http://lol.ru">Hello</a></td>

    Результат должен быть список (группы как угодно):
    1. <td class='lol'>
    2. <a href="http://lol.ru">
    3. Hello
    4. </a>
    5. </td>

    Regex:
    <\/?.*?> показывает только открытые и закрытые теги. Обычный текст не получается сделать.

    UPD:
    <\/?.*?>|[^><]+ - работает но может есть лучше вариант?

    P.s Понятное дело можно обойтись и без регулярных, смысл разобраться.
     
    #1 noxjoker, 30 Sep 2016
    Last edited: 30 Sep 2016
  2. pas9x

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

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Code:
    (\<td class\=\\\'lol\\\'\>)(\<a href\=\"(.+)\"\>)(.+)(\<\/a\>)(\<\/td\>)
    
    Можно и на асме писать) Без регулярок жизнь боль.
     
  3. noxjoker

    noxjoker Member

    Joined:
    7 Aug 2009
    Messages:
    189
    Likes Received:
    24
    Reputations:
    0
    Смысл сделать уникальную регулярку для любых тегов. Текст был к примеру.
     
  4. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    829
    Likes Received:
    815
    Reputations:
    90

    странноватый кейс... можно так сделать
    Code:
    ~$ cat reg.pl 
    $a = '<td class=\'lol\'><a href="http://lol.ru">Hello</a></td>';
    
    print "$1\n$2\n$3\n$4\n$5\n" if($a=~m!(<[^>]+>)(<a\shref[^>]+>)([\w]+)(</[^>]+>)(</[^>]+>)!);
    
    ~$ perl reg.pl
    <td class='lol'>
    <a href="http://lol.ru">
    Hello
    </a>
    </td>
    
     
    _________________________
  5. pas9x

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

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Такой регулярки не существует и существовать не может. Парсинг html/xml - это сложный процесс выполнить который всего лишь одной регуляркой невозможно.

    Если тебе нужен доступ к структуре кривого HTML то используй DOM-парсеры. Самый лучший DOM-парсер это браузер.
    Если нужна обработка документа в потоке то используй SAX-парсеры, правда они работают только с xml-документами правильной структуры.
     
    t0ma5 likes this.