Можно ли выполнить поиск по регулярному выражению с помощью Symfony Dom crawler? - PullRequest
0 голосов
/ 25 февраля 2019

Компонент Dom Crawler является мощным для синтаксического анализа html-содержимого, в его документации описываются базовые варианты выбора (например, filter('body > p')) или более сложные xpath, такие как //span[contains(@id, "article-")]

Возможно липолучить элементы с помощью регулярного выражения?Может быть, что-то подобное доступно: filter('body')->filter('div.*-timeLabel-*')?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я не уверен, но я думаю, что ответ - да, потому что метод фильтра сканера вызывает этот метод 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);
    }
0 голосов
/ 25 февраля 2019

Как то так?Изменил один из примеров из документов, применяя анонимную функцию.

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