2011-01-14 5 views
1

Я хотел бы извлечь содержимое из большого файла ячеек таблицы с помощью regexp и обработать данные с помощью PHP.Получить содержимое внутри HTML-тегов с помощью RegExp

Вот данные, которые я хотел бы, чтобы соответствовать:

<td>Current Value: </td><td>100.178</td> 

Я попытался с помощью этого регулярного выражения, чтобы соответствовать и получить текст:

preg_match("<td>Current Value: </td><td>(.+?)</td>", $data, $output); 

Однако я получаю «Неизвестный модификатор» предупреждение и мой переменная $ output выводится пустым.

Как я могу это сделать - и не могли бы вы дать мне краткое описание того, как работает решение, поэтому я могу попытаться понять, почему мой код не сделал этого?

ответ

2

Вам нужно добавить разделители вокруг регулярных выражений:

preg_match("#<td>Current Value: </td><td>(.+?)</td>#", $data, $output); 

Стандартный ограничитель /, но вы можете использовать другие не алфавитно-цифровые символы, если вы хотите (что имеет смысл здесь, потому что само регулярное выражение содержит косую черту) , В вашем случае, двигатель регулярных выражений думал, что вы хотите использовать угловые скобки в качестве разделителей - и не удалось.

Еще один совет (помимо канонического наставления «Не разбирайте HTML с регулярным выражением» (который, я думаю, в порядке, в данном случае это нормально): Используйте ([^<>]+) вместо (.*?). Это гарантирует, что ваше регулярное выражение никогда не будет перемещаться по вложенным тегам, что является общим источником ошибок при работе с языками разметки.

+0

Это работало. Когда нужны разделители? Могут ли они быть персонажами? – MarathonStudios

+0

Они всегда необходимы (в PHP), и они могут быть любым не-буквенно-цифровым символом. –

1

Я предлагаю вам использовать DOM Parser. Это упростит вашу жизнь, сохранит ваш код чище и будет легче поддерживать.

http://simplehtmldom.sourceforge.net/

Это имеет некоторые примеры доступа к дочерним элементам: http://simplehtmldom.sourceforge.net/manual.htm#section_traverse

+0

Это немного выше того, что мне нужно для этого конкретного проекта, но это выглядит как красивая библиотека. Я уверен, что буду использовать его в будущем! – MarathonStudios

+0

@Marathon это не так. На самом деле, это кусок дерьма (извините @jmort, это действительно так. Ничего личного). См. Http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662 для получения лучших альтернатив. – Gordon

+0

@ Gordon - LOL не беспокоится. Синтаксический разбор строк действительно не намного лучше. Я не знал, что это был SimpleXML. Какая гадость. – jmort253

Смежные вопросы