给出html如:
<!-- main layout and navbar stylesheets -->
<style type="text/css" media="all and (min-width:481px)">
@import url("/styles/main.css?v=11") screen, projection;
@import url("/styles/navbar.css?v=11") screen, projection;
</style>
如何使用php dom或regex从那大块html中获取@import网址?
至于我尝试的是什么,这是我做的,但它没有做到:
preg_match("/(url\([\'\"]?)([^\"\'\)]+)([\"\']?\))/", $html, $matches);
答案 0 :(得分:3)
您必须使用DOM 。但是否将RegEx用于你。使用dom解析样式的内容。
$doc = new DOMDocument();
$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName("style");
for($i=0;$i<$nodes->length;$i++){
$style = $nodes->item($i)->textContent;
// parse import rules on $style here.
// read bellow.
}
之后要么使用某种用PHP编写的css解析器(例如PHP-CSS-Parser),要么应用正则表达式。
如下所示的正则表达式(根据你的引用逃脱)将很好地解析它。
!@import\s+url\((['"])(.+?)\\1\)!
请参阅Example。
答案 1 :(得分:3)
这是另一种方法:
<?php
$html =
'
<!-- main layout and navbar stylesheets -->
<style type="text/css" media="all and (min-width:481px)">
@import url("/styles/main.css?v=11") screen, projection;
@import url("/styles/navbar.css?v=11") screen, projection;
</style>
';
if(preg_match_all('/url\(\"([^)]+)\"\)/', $html, $matches)){
foreach($matches[1] as $url){
print $url . "<br />";
}
}else{
print "No matches";
}
?>
phpfiddle链接:http://phpfiddle.org/main/code/w69-ecy
希望它有所帮助。
答案 2 :(得分:1)
这是使用php regex的工作代码:)
还包括一个工作小提琴:http://phpfiddle.org/main/code/yc5-61s
<?php
$inputString = '<!-- main layout and navbar stylesheets -->
<style>url1</style>
<style type="text/css" media="all and (min-width:481px)">
@import url("/styles/main.css?v=11") screen, projection;
@import url("/styles/navbar.css?v=11") screen, projection; url
@import url("http://www.jirilmon/style.css?v=99") screen, projection; url
</style>';
if(preg_match_all('/(@import) (url)\(([^>]*?)\)/',$inputString, $matches)){
print_r($matches[3]);
}else{
print "No matches";
}
?>
答案 3 :(得分:1)
试试这个 https://regex101.com/r/QrQxBN/1
使用
@import "font-awesome.min.css";
@import "simple-line-icons.css";
@import url(http://fonts.googleapis.com/css?family=Montserrat:700,400);
@import url('http://fonts.googleapis.com/css?family=ggg');
@import url("http://fonts.googleapis.com/css?family=ggg");
正则表达式
preg_match_all ("/@import[ ]*['\"]{0,}(url\()*['\"]*([^;'\"\)]*)['\"\)]*/ui", $csscontent, $urlscss2);
var_dump($cssFile);
var_dump($urlscss2);
答案 4 :(得分:0)
优秀的解决方案,但不够宽泛,我不得不修改它以使其更宽,并抓住@import的不同格式。
/@import (url\(\"?)?(url\()?(\")?(.*?)(?(1)\")+(?(2)\))+(?(3)\")/ig
有了这个正则表达式,你也可以抓住它:
@import url(comments.css);
@import "/style/main.css"
@import url("style-1024.css")