1. Куча / Говнокод #6198

    +135

    1. 1
    ^(?:[^<>]*<[^<>]+>)+?[ \n\t]*Вопрос №\d+\:[ \n\t]*((?:<[^<>]+>[^<>]*)+?)(?:<table>|<table [^<>]*>)[ \n\t]*(?:<tr>|<tr [^<>]*>)[ \n\t]*(?:<td>|<td [^<>]*>)[^<>]*(?:(?:(?:(?:<div>|<div[ \n\t]*[^<>]*>)|</div>|<div[ \n\t]*?/[ \n\t]*?>)|(?:(?:<p>|<p[ \n\t]*[^<>]*>)|</p>|<p[ \n\t]*?/[ \n\t]*?>)|(?:(?:<font>|<font[ \n\t]*[^<>]*>)|</font>|<font[ \n\t]*?/[ \n\t]*?>)|(?:(?:<html>|<html[ \n\t]*[^<>]*>)|</html>|<html[ \n\t]*?/[ \n\t]*?>)|(?:(?:<body>|<body[ \n\t]*[^<>]*>)|</body>|<body[ \n\t]*?/[ \n\t]*?>)|(?:(?:<head>|<head[ \n\t]*[^<>]*>)|</head>|<head[ \n\t]*?/[ \n\t]*?>)|(?:(?:<span>|<span[ \n\t]*[^<>]*>)|</span>|<span[ \n\t]*?/[ \n\t]*?>)|(?:(?:<style>|<style[ \n\t]*[^<>]*>)|</style>|<style[ \n\t]*?/[ \n\t]*?>)|(?:(?:<title>|<title[ \n\t]*[^<>]*>)|</title>|<title[ \n\t]*?/[ \n\t]*?>)|(?:(?:<br>|<br[ \n\t]*[^<>]*>)|</br>|<br[ \n\t]*?/[ \n\t]*?>)|(?:(?:<img>|<img[ \n\t]*[^<>]*>)|</img>|<img[ \n\t]*?/[ \n\t]*?>)|(?:(?:<meta>|<meta[ \n\t]*[^<>]*>)|</meta>|<meta[ \n\t]*?/[ \n\t]*?>))[^<>]*)*Вариан

    Продолжение (8 килобайт, сюда не влазит): http://pastie.org/1750060
    Регулярка безусловно генерится, но всё равно ГК.

    Запостил: burdakovd, 03 Апреля 2011

    Комментарии (3) RSS

    • если бы не генерилась, было бы шикарно
      Ответить
    • извечное желание парсить html регулярками...
      Ответить
      • Я знал, что это скажут.
        Да, можно было бы парсить с помощью HTML-парсера, например BeautifulSoup.
        Но! Код, который я получал на вход ооочень мало похож на парсабельный
        HTML.

        Избранное:
        открытые и не закрытые <tr> в таблице
        внутрь каждого <td> вставлена целая html-страница (с <html><head>, title, body, ...)
        Я удивлен, как браузеры вообще такое могли отобразить.

        Теги были чуть ли не на каждой странице расставлены по другому. Эта регулярка по крайней мере смогла хоть как-то зацепиться за какие-то инварианты страницы.
        Ответить

    Добавить комментарий