Использование Regex в PHP XPath-> оценивать - PullRequest
0 голосов
/ 07 ноября 2011

В качестве простого примера я пытаюсь получить все объекты dom, которые содержат адреса электронной почты.

    $doc = new DOMDocument;
    $doc->loadHTML($page);

    $xpath = new DOMXPath($doc);
    $body = $doc->getElementsByTagName('table')->item(0);
    $query = "//text()[fn:matches(., '[\w\d\.-]+@[\w\d\.-]+\.[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', '[\w\d\.-]+@[\w\d\.-]+\.[a-zA-Z]{2,4}', .)
]

без успеха.

Мне не удалось найти много примеров, связанных с fn: match или php: function. Любая помощь будет оценена.

1 Ответ

4 голосов
/ 07 ноября 2011

fn:matches - это XPath 2.0, в DOMXPath у вас есть XPath 1.0.Вот почему он не работает, он не поддерживается.

Примеры php:function доступны на странице руководства для DOMXPath::registerPhpFunctionsДля регистрации функций необходим PHP 5.3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...