Длинная регулярка (парсинг html)

Статус
В этой теме нельзя размещать новые ответы.

Wertos

Пьянь местная
Регистрация
13 Апр 2007
Сообщения
178
Реакции
39
PHP:
while (preg_match("#<div class=\"((?:[^>]*?))\">(?:(?:(?!<div ).)*?)<div class=\"(?:(?:[^>]*?))\">((?:(?!<div ).)*?)</div>(?:(?:(?!<div ).)*?)<div class=\"(?:(?:[^>]*?))\">((?:(?!<div ).)*?)</div>(?:(?:(?!<div ).)*?)</div>#sie", $text, $match))
{
      var_dump($match);
        switch ($match[1]) {
            case "sp-wrap":$replace="[spoiler=\"".$match[2]."\"]".$match[3]."[/spoiler]";break;
            case "c-wrap": $replace="[code]".$match[3]."[/code]"; break;
            case "q-wrap":
                $tag_q='';
                if (strripos($match[2], "</b> ")) {
                    preg_match("#<b>(.*?)</b>#i",$match[2], $q_author);
                    $tag_q= "=\"".$q_author[1]."\"";
                }
                $replace="[quote".$tag_q."]".$match[3]."[/quote]";
            break;
}

HTML:
<div class="sp-wrap">
<div class="sp-head folded"><span>Заголовок</span></div>
<div class="sp-body">
Текст в спойлере
</div>
</div>

HTML:
<div class="sp-wrap">
<div class="sp-body" title="Заголовок">
<h3 class="sp-title">Заголовок</h3>
Текст в спойлере
</div>
</div>

Помогите переписать под второй вариант, "Текст в спойлере" в ббкод оборачивал, на первый вариант срабатывает отлично. Остальное в функции работает отлично.
Должно быть так
Код:
[spoiler="Заголовок"]Текст в спойлере[/spoiler]
 
Возьмите DOM парсер и живите спокойно. Я пользуюсь phpQuery
 
PHP:
$regex = <<<END
@
<div\ class="([^"]*)">\s*
<div\ class="[^"]*"> ((?>[^<]+|(?!<div ).)*?) </div>\s*
<div\ class="[^"]*"> ((?>[^<]+|(?!<div ).)*?) </div>\s*
</div>
@sxi
END;

$text = <<<END

<div class="sp-wrap">
<div class="sp-head folded"><span>Заголовок</span></div>
<div class="sp-body">
Текст в спойлере
</div>
</div>

END;

preg_match($regex, $text, $match);
var_dump($match);



//////////////////////////////////////////////////////////////

$regex = <<<END
@
<div\ class="([^"]*)">\s*
<div\ class="[^"]*"[^>]*>\s*
<h3\ class="[^"]*"> ((?>[^<]+|(?!<h3).)*?) </h3>\s*
((?>[^<]+|(?!<div).)*?) </div>\s*
</div>
@sxi
END;

$text = <<<END

<div class="sp-wrap">
<div class="sp-body" title="Заголовок">
<h3 class="sp-title">Заголовок</h3>
Текст в спойлере
</div>
</div>

END;

preg_match($regex, $text, $match);
var_dump($match);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху