производительность анализатора php html - PullRequest
1 голос
/ 08 августа 2011

Мне нужно извлечь скрытый ввод из HTML-документа

<input type="hidden" name="email" id="email" value="email%40hotmail.com">

В настоящее время я использую http://simplehtmldom.sourceforge.net/, но я хотел бы знать, есть ли какое-нибудь более быстрое решение с более низким использованием оперативной памяти. Ввод находится где-то в середине документа, поэтому нет необходимости загружать всю HTML-страницу. Будет ли регулярное выражение работать быстрее? Мне придется иметь дело с миллионами документов. Чтобы было понятно, мне нужно извлечь только электронную почту% 40hotmail.com

Ответы [ 3 ]

1 голос
/ 08 августа 2011

Я нахожу DomDocument с XPath довольно быстро и хорошо работает с памятью. Еще одно преимущество заключается в том, что в нем используются определенные стандарты, такие довольно независимые и доступные, и, как правило, все, что нужно для выполнения работы, поэтому, вероятно, это немного проще, чем загрузка библиотеки, использующей то же самое.

Простой поиск строк (ищите начальный шаблон, ищите конечный шаблон) может быть быстрее, но он плохо масштабируется при изменении документов. Однако это даже быстрее, чем компиляция и запуск регулярного выражения.

1 голос
/ 08 августа 2011

Если вам нужны только точные совпадения с этим форматом, тогда обязательно используйте регулярное выражение.Вы не можете выполнять синтаксический анализ html общего назначения, но вы можете получить простой шаблон.

Это сделает это:

<input type="hidden" name="email" id="email" value="([^"]*)">

Подстановочный знак соответствует всему, что не является двойной кавычкойперсонаж.Не забудьте декодировать html-сущности.

0 голосов
/ 08 августа 2011

Вы можете сделать это:

$html = '<input type="hidden" name="email" id="email" value="email%40hotmail.com">';
preg_match('%<input type="hidden" name="email" id="email" value="([^\"]+)">%', $html, $email);

EDITED

Я заблуждаюсь, регулярное выражение более быстрое.

...