在PHP XPath中使用Regex->评估

时间:2011-11-06 23:59:37

标签: php regex dom xpath

作为一个简单的例子,我试图获取包含电子邮件地址的所有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 个答案:

答案 0 :(得分:4)

fn:matches是XPath 2.0,在DOMXPath中,你有XPath 1.0。这就是为什么它不起作用,它不受支持。

php:function的手册页提供了{{1}}的示例。您需要使用PHP 5.3来注册函数。

相关问题