Регулярное выражение для содержимого внутри <td> и </ td>

Мне нужно найти регулярное выражение для поиска содержимого внутри и тегов для использования в PHP. Я пытался…

preg_split("<td>([^\"]*)</td>", $table[0]); 

Но это дает мне ошибку PHP …

 Warning: preg_split(): Unknown modifier '(' in C:\xampp\htdocs\..... 

Может ли кто-нибудь сказать мне, что я делаю неправильно?

Попробуй это:

 preg_match("/<td>([^\"]*)<\/td>/", $table[0], $matches); 

Но, как правило, пожалуйста , не пытайтесь анализировать HTML с регулярными выражениями … 🙂

Используйте preg_match вместо preg_split

 preg_match("|<td>([^<]*)</td>|", $table[0], $m); print_r($m); 

Имейте в виду, что вам нужно сделать дополнительную работу, чтобы убедиться, что * между <td> и </td> в вашем регулярном выражении не перекрывает целые строки <td>some text</td> . Это потому, что * очень жадный.

Чтобы отменить жадность * , вы можете поставить ? после него – это говорит, что он просто хватается, пока первый раз не достигнет того, что есть после * . Итак, регулярное выражение, которое вы ищете, похоже на:

 /<td>(.*?)<\/td>/ 

Помните, поскольку регулярное выражение начинается и заканчивается символом / , вы должны быть осторожны с любым / , находящимся внутри вашего обычного выражения, – их нужно избегать. Следовательно, \/ .

Из вашего обычного выражения кажется, что вы также пытаетесь исключить любой " символ, который может быть между <td> и </td> – это правильно? Если это так, вы должны изменить регулярное выражение для использования следующие:

 /<td>([^\"]*?)<\/td>/ 

Но, предполагая, что вы не хотите исключать " символ в ваших матчах» , ваш PHP-код может выглядеть так, используя preg_match_all вместо preg_match .

 preg_match_all("/<td>(.*?)<\/td>/", $str, $matches); print_r($matches); 

То, что вы ищете, находится в $matches[1] .

Прежде всего, вы забыли обернуть регулярное выражение разделителями. Также не следует указывать закрывающий тег td в regex.

Попробуйте следующий код. Предполагая, что $table[0] содержит html между тегами <table> , </table> , она позволяет извлекать любой контент (включая html) из ячеек таблицы:

 $a_result = array_map( function($v) { return preg_replace('/<\/td\s*>/i', '', $v); }, array_slice(preg_split('/<td[^>]*>/i', $table[0]), 1) );