извлечь строку тегов стиля из головы с помощью 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);

person Mike    schedule 21.12.2011    source источник


Ответы (1)


Проблема, которую я вижу, заключается в том, что начало вашего регулярного выражения и конец находятся в разных строках. Измените свое правило на:

$styles='';

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

поскольку модификатор s означает, что точка (.) захватывает не только «что угодно, кроме концов строки», но также «концы строки».

person Sergi Juanola    schedule 25.08.2012