Мне нужно найти регулярное выражение для поиска содержимого внутри и тегов для использования в 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) );