Выцепить таблицы
[HTML]<body>
<table ...>
<tr>
...
...
...
</tr>
</table>
<table ...>
<tr>
...
...
...
</tr>
</table>
</body>[/HTML]
То бишь это несколько таблиц, идущих подряд. Табов нигед нет, внутри таблиц много столбцов и строк.
Этот файл нужно разбить на несколько так, чтобы в каждом была ровно одна таблица.
Я собирался делать это через preg_split(): в кажый эл-т массива впихнуть всё, что находится между <table и </table>, а потом просто добавить к этому всё, что необходимо для полноценной HTML-странички.
Главный вопрос: как составить регулярку? :o Написать просто /<table.+</table>/si нельзя, он так выбирает все таблицы сразу, то есть в массиве выходит всего один элемент. Нужно как-то исключить из шаблон последовательность "table". Как?
Я бы таки использовал DOM. С регулярками напаришься: очень трудно сваять правило для вложенных узлов (в твоём случае table).
Код:
// $html - твой хтмл файл
while(preg_match("#<table.*?>#si",$html)) {
$table = preg_replace("#(<table.+?</table>)#si","\1",$html);
// операции с таблицей $table;
$html = preg_replace("#(<table.+?</table>)#si","",$html); // удаляем таблицу из текста
}
while(preg_match("#<table.*?>#si",$html)) {
$table = preg_replace("#(<table.+?</table>)#si","\1",$html);
// операции с таблицей $table;
$html = preg_replace("#(<table.+?</table>)#si","",$html); // удаляем таблицу из текста
}
Конечно не очень красиво, но пахать должно) Тем более операция-то на раз, а не на постоянку. Но тут естественно предполагается, что таблицы не вложены друг в друга. Если вложены, тогда уже рекурсию использовать прийдется.
Насчет DOM - имхо можно. Но может быть код невалидные, я конечно могу сейчас ошибаться, но парсер ругается иногда на это.
UAS, спасибо!
[COLOR="Silver"][size=1]Короче потом исправлю, а то в универ пора[/size][/COLOR]
Я это тоже заметил, но это не важно, за регулярку спасибо! Она работает, осталось понять почему :) Но это к манам.
Цитата: Валериус
У меня есть HTML-файл, в нём приерна такое содержимое
[html]<body>
<table ...>
<tr>
...
...
...
</tr>
</table>
<table ...>
<tr>
...
...
...
</tr>
</table>
</body>[/html]
То бишь это несколько таблиц, идущих подряд. Табов нигед нет, внутри таблиц много столбцов и строк.
Этот файл нужно разбить на несколько так, чтобы в каждом была ровно одна таблица.
Я собирался делать это через preg_split(): в кажый эл-т массива впихнуть всё, что находится между <table и </table>, а потом просто добавить к этому всё, что необходимо для полноценной HTML-странички.
Главный вопрос: как составить регулярку? :o Написать просто /<table.+</table>/si нельзя, он так выбирает все таблицы сразу, то есть в массиве выходит всего один элемент. Нужно как-то исключить из шаблон последовательность "table". Как?
[html]<body>
<table ...>
<tr>
...
...
...
</tr>
</table>
<table ...>
<tr>
...
...
...
</tr>
</table>
</body>[/html]
То бишь это несколько таблиц, идущих подряд. Табов нигед нет, внутри таблиц много столбцов и строк.
Этот файл нужно разбить на несколько так, чтобы в каждом была ровно одна таблица.
Я собирался делать это через preg_split(): в кажый эл-т массива впихнуть всё, что находится между <table и </table>, а потом просто добавить к этому всё, что необходимо для полноценной HTML-странички.
Главный вопрос: как составить регулярку? :o Написать просто /<table.+</table>/si нельзя, он так выбирает все таблицы сразу, то есть в массиве выходит всего один элемент. Нужно как-то исключить из шаблон последовательность "table". Как?
Почитай про модификаторы :) например U тебе должен помочь - делает регулярку нежадной
Цитата: Fenyx
U тебе должен помочь - делает регулярку нежадной
Так вот что обозначает "нежадный"! Спасибо! :-)
Цитата: Валериус
Так вот что обозначает "нежадный"! Спасибо! :-)
нема за що
Человек человеку — друг, товарищ и волк:)