是否可以使用Symfony Dom crawler通过regexp进行搜索?

是否可以使用Symfony Dom crawler通过regexp进行搜索?,symfony,parsing,dom,domcrawler,Symfony,Parsing,Dom,Domcrawler,它强大的解析html内容的能力,在它的文档中描述了一些基本的选择,如filter'body>p'或更复杂的xpath,如//span[contains@id,第条-] 是否可以通过正则表达式获取元素?也许类似的东西是可用的:filter'body'->filter'div.*-timeLabel-*' 像这样的?修改了文档中应用匿名函数的一个示例 $nodeValues = $crawler->filter('body')->each(function (Crawler $node,

它强大的解析html内容的能力,在它的文档中描述了一些基本的选择,如filter'body>p'或更复杂的xpath,如//span[contains@id,第条-]


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

像这样的?修改了文档中应用匿名函数的一个示例

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

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

/** *将CSS表达式转换为其XPath等价物。 * *或者,可以向生成的XPath添加前缀 *带有$prefix参数的表达式。 * *@param string$cssExpr CSS表达式 *@param string$prefix是XPath表达式的可选前缀 * *@返回字符串 */ 公共函数toXPath$cssExpr,$prefix='后代或自身::' { 返回$this->translator->cssToXPath$cssExpr,$prefix; }
在XPath 2.0中,可以使用匹配项:

$crawler->filterXPath("//div[matches(@id, '*-timeLabel-*')]");
但是,如果您没有可用的XPath,那么最好尝试并组合其他XPath,例如,这应该对您的情况起到作用:

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