使用preg_replace和preg_match_all从头部提取样式标记行

时间:2011-12-21 04:49:03

标签: php regex preg-replace preg-match-all

在php中想要从html头部收集样式行并用空格替换它们。 我尝试使用preg_match_all和preg_replace但我没有工作解决方案。

$myhtml="
 <title>my title</title>
 <link rel="stylesheet" type="text/css" href="style1.css" />
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" />
 <link href="style2.css" type="text/css"  rel="stylesheet" />
 <!--[if lt IE 9]>
    <link href="style3.css" rel="stylesheet" type="text/css" />
 <![endif]-->
 <meta name="author" content="i'm the author" />
 <!--[if lt IE 6]>
    <link href="style4.css" type="text/css" rel="stylesheet"/>
 <![endif]-->
 <style>
   #body{background-color:#CCC;}
 </style>
";

我期待结果

$myhtml="
 <title>my title</title>
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" />
 <meta name="author" content="i'm the author" />
";

$extracted_styles="
 <link rel="stylesheet" type="text/css" href="style1.css" />
 <link href="style2.css" type="text/css"  rel="stylesheet" />
 <!--[if gt IE 8]>
    <link href="style3.css" rel="stylesheet" type="text/css" />
 <![endif]-->
 <!--[if lt IE 6]>
    <link href="style4.css" type="text/css" rel="stylesheet"/>
 <![endif]-->
 <style>
   #body{background-color:#CCC;}
 </style>
";

php:我尝试首先提取条件css,稍后链接rel但是已经第一步不能正常工作

$styles='';

//extract conditional css
preg_match_all('/<!--(.*)-->/i', $myhtml, $matches);
$styles.=implode(" ",$matches);
preg_replace('/<!--(.*)-->/i', "", $myhtml);

1 个答案:

答案 0 :(得分:0)

我看到的问题是你的正则表达式和结尾的开头是不同的行。将您的规则更改为:

$styles='';

//extract conditional css
preg_match_all('/<!--(.*)-->/is', $myhtml, $matches);
$styles.=implode(" ",$matches);
preg_replace('/<!--(.*)-->/is', "", $myhtml);

因为s修饰符暗示点(。)不仅抓住“除了行的末尾之外的任何东西”,而且还“行的末尾”。