Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регулярка моей мечты, вот она! РРРегулярочка!
 
 автор: kasmanaft   (08.07.2016 в 00:35)   письмо автору
 
 

Доброй ночи, Уважаемые Господа! :) Давненько меня здесь не было..
Но сегодня особый день.

9 лет назад, (о боги!..), в топике под номером 39387 я задавался вопросом, крутящимся около рекурсивных регулярных выражений. Помню, долго ломал голову тогда.. однако, безрезультатно. Не вспомню уже, как зародился вопрос в тот раз, но сегодня я о нём вспомнил.

Похожая принципиально задача: подчистить html страницу от лишних блоков. То есть убрать тег с каким-то классом, имеющий, разумеется, дочерние элементы.
Я, конечно, понимаю, что возможны другие варианты, но стало интересно.. такзкзть тряхнуть стариной.
Уже и забыл, как это было.
(бывало поглядывал на регулярочку отсюда: http://softtime.ru/forum/read.php?id_forum=6&id_theme=37964#post226686 .. - с немалым удивлением, не веря, что оно моих рук дело, не понимая, "как" и "зачем").
Сегодня вспомнил, собственно, "как"..

И сделал для себя открытие, которого как раз таки и не хватило в прошлый раз:
оказывается рекурсию можно запускать не на всё выражение (?R), а на какую-то конкретную группу: (?1). Или даже относительно: (?-1).

Делюсь результатом. Возможно, кому-то будет полезно.
Удалим со страницы форума таблички сверху и пару блоков снизу:

<?php 
$text 
file_get_contents('http://softtime.ru/forum/index.php?id_forum=6'); 
$text str_replace('<head>''<head><base href="http://softtime.ru/forum/" target="_blank">'$text); 

echo 
preg_replace('%
    <(table|div)[^>]+(?:diztabletop|newposttable|toplinks|switchforumdiv|float:right;)[^>]+> 
    (?> 
     (?>(?>(?!(?:<\1(?:[^<>]*)>|</\1>)).)+) 
       | # alx.borovikov@gmail.com 
      (<\1(?>[^>]*)>(?:(?>(?:(?!(<\1(?>[^>]*)>|</\1>)).)+)|(?-2))*</\1>) 
    )* 
    </\1>%xsi'
''$text 
);


Когда эта штука заработала, счастье было неописуемое. :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования