是否可以使用Symfony Dom搜寻器通过正则表达式进行搜索?

时间:2019-02-25 13:09:07

标签: symfony parsing dom domcrawler

Dom Crawler Component具有强大的解析html内容的功能,在其文档中描述了基本选择(如filter('body > p'))或更复杂的xpath如//span[contains(@id, "article-")]

是否可以通过正则表达式获取元素?也许可以使用类似的东西:filter('body')->filter('div.*-timeLabel-*')

3 个答案:

答案 0 :(得分:2)

像这样?修改了文档中使用匿名函数的示例之一。

$nodeValues = $crawler->filter('body')->each(function (Crawler $node, $i) {
    // regex and return $node->attr('class')
});

答案 1 :(得分:1)

我不确定,但我认为答案是肯定的,因为搜寻器调用的过滤方法  CssSelectorConverter的这种方法,根据文档,您可以将表达式作为参数传递

    /**
     * Translates a CSS expression to its XPath equivalent.
     *
     * Optionally, a prefix can be added to the resulting XPath
     * expression with the $prefix parameter.
     *
     * @param string $cssExpr The CSS expression
     * @param string $prefix  An optional prefix for the XPath expression
     *
     * @return string
     */
    public function toXPath($cssExpr, $prefix = 'descendant-or-self::')
    {
        return $this->translator->cssToXPath($cssExpr, $prefix);
    }

答案 2 :(得分:0)

在XPath 2.0中,您可以使用匹配项:

$crawler->filterXPath("//div[matches(@id, '*-timeLabel-*')]");

但是如果您没有可用的,最好的选择是尝试结合其他XPath methods,例如,这应该可以解决您的问题:

$crawler->filterXPath("//div[contains(@id, '*-timeLabel-*')]");