Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выцепить таблицы

1.8K
24 апреля 2008 года
Валериус
190 / / 14.07.2006
У меня есть HTML-файл, в нём приерна такое содержимое

[HTML]<body>
<table ...>
<tr>
...
...
...
</tr>
</table>
<table ...>
<tr>
...
...
...
</tr>
</table>
</body>[/HTML]
То бишь это несколько таблиц, идущих подряд. Табов нигед нет, внутри таблиц много столбцов и строк.

Этот файл нужно разбить на несколько так, чтобы в каждом была ровно одна таблица.
Я собирался делать это через preg_split(): в кажый эл-т массива впихнуть всё, что находится между <table и </table>, а потом просто добавить к этому всё, что необходимо для полноценной HTML-странички.

Главный вопрос: как составить регулярку? :o Написать просто /<table.+</table>/si нельзя, он так выбирает все таблицы сразу, то есть в массиве выходит всего один элемент. Нужно как-то исключить из шаблон последовательность "table". Как?
8
24 апреля 2008 года
mfender
3.5K / / 15.06.2005
Я бы таки использовал DOM. С регулярками напаришься: очень трудно сваять правило для вложенных узлов (в твоём случае table).
244
24 апреля 2008 года
UAS
2.0K / / 19.07.2006
Ну так че сложного-то.
 
Код:
// $html - твой хтмл файл
while(preg_match("#<table.*?>#si",$html)) {
    $table = preg_replace("#(<table.+?</table>)#si","\1",$html);
    // операции с таблицей $table;
    $html = preg_replace("#(<table.+?</table>)#si","",$html); // удаляем таблицу из текста
}

Конечно не очень красиво, но пахать должно) Тем более операция-то на раз, а не на постоянку. Но тут естественно предполагается, что таблицы не вложены друг в друга. Если вложены, тогда уже рекурсию использовать прийдется.

Насчет DOM - имхо можно. Но может быть код невалидные, я конечно могу сейчас ошибаться, но парсер ругается иногда на это.
1.8K
24 апреля 2008 года
Валериус
190 / / 14.07.2006
Код валидный, причём strict - его Gnumeric генерит.

UAS, спасибо!
244
24 апреля 2008 года
UAS
2.0K / / 19.07.2006
Эммм я тут заметил, что написал-то код не правильно) Он-то тогда все таблицы на пустоту заменить должен >_<

[COLOR="Silver"][size=1]Короче потом исправлю, а то в универ пора[/size][/COLOR]
1.8K
24 апреля 2008 года
Валериус
190 / / 14.07.2006
Я это тоже заметил, но это не важно, за регулярку спасибо! Она работает, осталось понять почему :) Но это к манам.
304
25 апреля 2008 года
Fenyx
707 / / 26.01.2005
Цитата: Валериус
У меня есть HTML-файл, в нём приерна такое содержимое

[html]<body>
<table ...>
<tr>
...
...
...
</tr>
</table>
<table ...>
<tr>
...
...
...
</tr>
</table>
</body>[/html]
То бишь это несколько таблиц, идущих подряд. Табов нигед нет, внутри таблиц много столбцов и строк.

Этот файл нужно разбить на несколько так, чтобы в каждом была ровно одна таблица.
Я собирался делать это через preg_split(): в кажый эл-т массива впихнуть всё, что находится между <table и </table>, а потом просто добавить к этому всё, что необходимо для полноценной HTML-странички.

Главный вопрос: как составить регулярку? :o Написать просто /<table.+</table>/si нельзя, он так выбирает все таблицы сразу, то есть в массиве выходит всего один элемент. Нужно как-то исключить из шаблон последовательность "table". Как?


Почитай про модификаторы :) например U тебе должен помочь - делает регулярку нежадной

1.8K
25 апреля 2008 года
Валериус
190 / / 14.07.2006
Цитата: Fenyx
U тебе должен помочь - делает регулярку нежадной


Так вот что обозначает "нежадный"! Спасибо! :-)

304
25 апреля 2008 года
Fenyx
707 / / 26.01.2005
Цитата: Валериус
Так вот что обозначает "нежадный"! Спасибо! :-)


нема за що
Человек человеку — друг, товарищ и волк:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог