Соответствие всем файлам CSS в Wordpress HTML

Я пытаюсь захватить все файлы CSS в HTML, созданном с сайта Wordpress.

Пока у меня есть следующие

preg_match_all('/"([^"]+?\.css)"/', $op, $css);

Это дает мне все URL-адреса * .css, у которых нет строки запроса, но, как я уверен, вы знаете, WP имеет забавный способ добавить к ним строку запроса ... поэтому 20+ остальных файлов CSS не захватываются.

Как я могу изменить это, чтобы получить их все?

Разбор Dom не является вариантом, поскольку WP очень редко создает действительный html ...


person Kevin    schedule 02.12.2015    source источник
comment
Я не знаю контекста, например: что находится в $ op и $ css. Но моя первая попытка была бы preg_match_all('/"([^"]+?\.css.+(?<!"))"/', $op, $css);   -  person Pioneer Skies    schedule 02.12.2015
comment
Я думаю, вы могли бы сделать "([^"]+?\.css[^."]*)", что могло бы быть с / без.   -  person    schedule 02.12.2015
comment
Ни один из них этого не делает. Контекст? Wordpress сгенерировал HTML, как указано в вопросе ...   -  person Kevin    schedule 02.12.2015
comment
@ Кевин - Правда? Мое регулярное выражение не совпадает? Затем покажите образец строки, которую вам нужно сопоставить. Насколько я помню, [^"]*" будет соответствовать '.cssanything you find here except double quote"'   -  person    schedule 02.12.2015
comment
Я не собираюсь публиковать полный HTML-код, который $ op = Любой сайт wordpress, вероятно, сделает уловку LOL. Интересно, это делает последний "   -  person Kevin    schedule 02.12.2015
comment
Вот пример того, что вы делаете: kevinpirnie.com/default.php и все, что я делаю для получить содержимое - это простой запрос curl на строковый вывод для полного HTML (да, проверено)   -  person Kevin    schedule 02.12.2015
comment
прочитай это! stackoverflow.com/questions/18748052/   -  person nguaman    schedule 02.12.2015
comment
Dom-синтаксический анализ недоступен из-за того, что wordpress неэффективно представляет свой html примерно для 80% сайтов wordpress.   -  person Kevin    schedule 02.12.2015
comment
Поверьте мне, @NelsonGuamanLeiva, я бы хотел сделать это вот так ... к сожалению, как я уверен, вы знаете ... wp не самый дружелюбный из зверей для разработчиков: D lol   -  person Kevin    schedule 02.12.2015


Ответы (1)


Если синтаксический анализ DOM невозможен, рассмотрите следующий код. Вы были близки:

// just a random css link
$str = "href='/wp-content/themes/optimizePressTheme/lib/js/fancybox/jquery.fancybox.min.css?ver=2.3.4.3'";

// match href literally, then use a named group called css
$regex = "/href=['\"](?P<css>([^'\"]+?\.css)[^'\"]*)/";
preg_match_all($regex, $str, $matches);
print_r($matches["css"]);
// e.g. /wp-content/themes/optimizePressTheme/lib/js/fancybox/jquery.fancybox.min.css?ver=2.3.4.3

Тем не менее, рассмотрите возможность использования парсера DOM, он в основном будет работать с плохо отформатированным HTML тоже.

person Jan    schedule 02.12.2015
comment
Блин близко;) Спасибо. Проверьте пункты 6 и 7: kevinpirnie.com/default.php?_=6 - person Kevin; 02.12.2015
comment
Посмотрим на это более внимательно завтра. Тогда ваша ссылка еще действительна? - person Jan; 02.12.2015
comment
Не торопись, приятель, да, это должно быть - person Kevin; 02.12.2015
comment
@Kevin: Я забыл одну цитату в скобках, см. Мой обновленный ответ. - person Jan; 03.12.2015
comment
Эй, @Jan, все еще нету: kevinpirnie.com/default.php?_=6 не хватает тех, что в нижнем поле - person Kevin; 03.12.2015
comment
@Kevin Поменял последний + на звезду (*), см. Мой обновленный ответ. Предполагая, что все это происходит с вашего веб-сайта, я сопоставил 30 файлов css, включая файлы с js_composer. Это соответствует файлам css без добавленной строки запроса (* означает ноль раз или больше). - person Jan; 03.12.2015
comment
бинго! Спасибо, Ян, теперь о более важных (надеюсь) вещах;) - person Kevin; 03.12.2015