#php #regex #dom #xpath
#php #регулярное выражение #dom #xpath
Вопрос:
В качестве простого примера я пытаюсь получить все объекты dom, которые содержат адреса электронной почты.
$doc = new DOMDocument;
$doc->loadHTML($page);
$xpath = new DOMXPath($doc);
$body = $doc->getElementsByTagName('table')->item(0);
$query = "//text()[fn:matches(., '[wd.-] @[wd.-] .[a-zA-Z]{2,4}')]"; //
$entries = $xpath->evaluate($query, $body); //
foreach ($entries as $entry) {
echo "Found {$entry->textContent}<br>n";
}
Я получаю сообщение об ошибке: "DOMXPath::evaluate() [domxpath.evaluate]: xmlXPathCompOpEval: function matches bound to undefined prefix fn ..."
Я также попробовал подход
//text()[
php:function('BooleanPregMatch', '[wd.-] @[wd.-] .[a-zA-Z]{2,4}', .)
]
безуспешно.
Я не смог найти много примеров, связанных с fn: match или php:function. Любая помощь была бы оценена.
Комментарии:
1. могу ли я предложить попробовать это с двойными кавычками в функции matches()?
2. Вы читали
DOMXPath::registerPhpFunctions()
страницу ?
Ответ №1:
fn:matches
это XPath 2.0, в DOMXPath у вас XPath 1.0. Вот почему он не работает, он не поддерживается.
Примеры для php:function
доступны на странице руководства для DOMXPath::registerPhpFunctions
. Для регистрации функций у вас должен быть PHP 5.3.