Я хотел бы извлечь содержимое из большого файла ячеек таблицы с помощью regexp и обработать данные с помощью PHP.
Вот данные, которые я хотел бы сопоставить:
<td>Current Value: </td><td>100.178</td>
Я попытался использовать это регулярное выражение для соответствия и получения текста:
preg_match("<td>Current Value: </td><td>(.+?)</td>", $data, $output);
Однако я получаю предупреждение «Неизвестный модификатор», а мой переменный $ output выходит пустым.
Как я могу это сделать – и вы могли бы дать мне краткий обзор того, как работает решение, поэтому я могу попытаться понять, почему мой код не сделал этого?
Вам нужно добавить разделители вокруг своего регулярного выражения:
preg_match("#<td>Current Value: </td><td>(.+?)</td>#", $data, $output);
Стандартным разделителем является /
, но вы можете использовать другие не буквенно-цифровые символы, если хотите (что имеет смысл здесь, потому что само регулярное выражение содержит косые черты). В вашем случае, двигатель регулярных выражений думал, что вы хотите использовать угловые скобки в качестве разделителей – и не удалось.
Еще один совет (помимо канонического увещания «Не разбирайте HTML с регулярным выражением» (который, я думаю, в порядке, в данном случае, совершенно нормально): Используйте ([^<>]+)
вместо (.*?)
, Это гарантирует, что ваше регулярное выражение никогда не будет перемещаться по вложенным тегам, что является общим источником ошибок при работе с языками разметки.
Я бы предложил вам использовать DOM Parser. Это упростит вашу жизнь, сохранит ваш код чище и будет легче поддерживать.
http://simplehtmldom.sourceforge.net/
У этого есть некоторые примеры доступа к дочерним элементам: http://simplehtmldom.sourceforge.net/manual.htm#section_traverse