Имеется экспортированная в html таблица из ms access. Необходим скрипт который будет вычищать из файла все, кроме таблицы с данными. Если файл уже содержит только таблицу, то скрипт выполнятся не должен. Мне видится такой алгоритм: Код (Text): если первая строка НЕ начинается с <table, то { вычилить количество строк находящихся выше (сверху вниз до тэга <table) и удалить их. вычислить количество строк вниз от тэга </table> и также удалить их. удалить все атрибуты и их значения у всех тэгов везде удалить тэг <FONT> и его закрывающий </FONT> удалить строку с тэгами <TFOOT> и </TFOOT> } В общем, на выходе всегда должен получаться код вида: <table ... </table> Заранее спасибо за помощь. Спойлер: Таблица до выполнения скрипта HTML: <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=UTF-8"> <TITLE>Студенты</TITLE> </HEAD> <BODY> <TABLE BORDER=1 BGCOLOR=#ffffff CELLSPACING=0><FONT FACE="Calibri" COLOR=#000000><CAPTION><B>Студенты</B></CAPTION></FONT> <THEAD> <TR> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Код</FONT></TH> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Имя</FONT></TH> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Фамилия</FONT></TH> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Отчество</FONT></TH> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Дата_рождения</FONT></TH> </TR> </THEAD> <TBODY> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>1</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Иван</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Иванов</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Иванович</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>14.07.1988</FONT></TD> </TR> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>2</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Петр</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Петров</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Петрович</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>11.06.1999</FONT></TD> </TR> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>3</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Алексей</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Алексеев</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Алексеевич</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>23.07.1989</FONT></TD> </TR> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>4</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Андрей</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Андреев</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Андреевич</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>08.08.1979</FONT></TD> </TR> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>5</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Евгений</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Евгеньев</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Евгеньевич</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>27.02.1982</FONT></TD> </TR> </TBODY> <TFOOT></TFOOT> </TABLE> </BODY> </HTML> Спойлер: Таблица после выполнения скрипта HTML: <TABLE><CAPTION><B>Студенты</B></CAPTION> <THEAD> <TR> <TH>Код</TH> <TH>Имя</TH> <TH>Фамилия</TH> <TH>Отчество</TH> <TH>Дата_рождения</TH> </TR> </THEAD> <TBODY> <TR> <TD>1</TD> <TD>Иван</TD> <TD>Иванов</TD> <TD>Иванович</TD> <TD>14.07.1988</TD> </TR> <TR> <TD>2</TD> <TD>Петр</TD> <TD>Петров</TD> <TD>Петрович</TD> <TD>11.06.1999</TD> </TR> <TR> <TD>3</TD> <TD>Алексей</TD> <TD>Алексеев</TD> <TD>Алексеевич</TD> <TD>23.07.1989</TD> </TR> <TR> <TD>4</TD> <TD>Андрей</TD> <TD>Андреев</TD> <TD>Андреевич</TD> <TD>08.08.1979</TD> </TR> <TR> <TD>5</TD> <TD>Евгений</TD> <TD>Евгеньев</TD> <TD>Евгеньевич</TD> <TD>27.02.1982</TD> </TR> </TBODY> </TABLE>
тут ничего сложного https://www.php.net/manual/ru/function.strpos.php https://www.php.net/manual/ru/function.substr.php
Код для обработки Код (Text): <?php $file = file_get_contents("table.html"); preg_match_all("/(<table.*?>.*?<\/table>)/siu", $file, $matches); $table = $matches[1][0] ?? ''; file_put_contents("table_result.html", $table);
это не команда, это результат работы пред строки Код (Text): preg_match_all("/(<table.*?>.*?<\/table>)/siu", $file, $matches); в регулярке ищется таблица, результат складывается в переменную $matches
@kazadai90 там же идет операция присваивания, но сначала проверяется какое-то условие (??) разве не так?
Код (Text): $table = $matches[1][0] ?? ''; в php 7 данная конструкция эквивалента Код (Text): $table = isset($matches[1][0]) ? $matches[1][0] : ''; из php 5 версии
PHP: <?php $re = '/(<table.*?>.*?<\/table>)/isu'; $str = '<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=UTF-8"> <TITLE>Студенты</TITLE> </HEAD> <BODY> <TABLE BORDER=1 BGCOLOR=#ffffff CELLSPACING=0><FONT FACE="Calibri" COLOR=#000000><CAPTION><B>Студенты</B></CAPTION></FONT> <THEAD> <TR> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Код</FONT></TH> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Имя</FONT></TH> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Фамилия</FONT></TH> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Отчество</FONT></TH> <TH BGCOLOR=#c0c0c0 BORDERCOLOR=#000000 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Дата_рождения</FONT></TH> </TR> </THEAD> <TBODY> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>1</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Иван</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Иванов</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Иванович</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>14.07.1988</FONT></TD> </TR> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>2</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Петр</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Петров</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Петрович</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>11.06.1999</FONT></TD> </TR> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>3</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Алексей</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Алексеев</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Алексеевич</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>23.07.1989</FONT></TD> </TR> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>4</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Андрей</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Андреев</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Андреевич</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>08.08.1979</FONT></TD> </TR> <TR VALIGN=TOP> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>5</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Евгений</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Евгеньев</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>Евгеньевич</FONT></TD> <TD BORDERCOLOR=#e7e6e6 ALIGN=RIGHT><FONT style=FONT-SIZE:11pt FACE="Calibri" COLOR=#000000>27.02.1982</FONT></TD> </TR> </TBODY> <TFOOT></TFOOT> </TABLE> </BODY> </HTML>'; preg_match($re, $str, $matches); #print_r($matches[0]); $_= preg_replace('/<(\w+)( .*?)>/isu', "<$1>", $matches[0]); $_= preg_replace('/<\/?FONT>/isu', "", $_); print $_= preg_replace('/<\/?TFOOT>/isu', "", $_); --- Добавлено --- Результат: HTML: <TABLE><CAPTION><B>Студенты</B></CAPTION> <THEAD> <TR> <TH>Код</TH> <TH>Имя</TH> <TH>Фамилия</TH> <TH>Отчество</TH> <TH>Дата_рождения</TH> </TR> </THEAD> <TBODY> <TR> <TD>1</TD> <TD>Иван</TD> <TD>Иванов</TD> <TD>Иванович</TD> <TD>14.07.1988</TD> </TR> <TR> <TD>2</TD> <TD>Петр</TD> <TD>Петров</TD> <TD>Петрович</TD> <TD>11.06.1999</TD> </TR> <TR> <TD>3</TD> <TD>Алексей</TD> <TD>Алексеев</TD> <TD>Алексеевич</TD> <TD>23.07.1989</TD> </TR> <TR> <TD>4</TD> <TD>Андрей</TD> <TD>Андреев</TD> <TD>Андреевич</TD> <TD>08.08.1979</TD> </TR> <TR> <TD>5</TD> <TD>Евгений</TD> <TD>Евгеньев</TD> <TD>Евгеньевич</TD> <TD>27.02.1982</TD> </TR> </TBODY> </TABLE>
Всем большое спасибо. Остановился на таком варианте: Спойлер: код PHP: $html_table = file_get_contents("table.html"); $dom = new DOMDocument; $dom->loadHTML($html_table); $xpath = new DOMXPath($dom); $nodes = $xpath->query('//@*'); foreach ($nodes as $node) { $node->parentNode->removeAttribute($node->nodeName); } $html_table = $dom->saveHTML(); $html_table = preg_replace("/<title>.*<\/title>/", '', $html_table); $html_table = strip_tags($html_table, '<table> <tbody> <thead> <caption> <tr> <th> <td>'); Есть какие-либо серьезные недостатки (или ошибки) в этом коде?