У меня есть небольшая проблема с комментариями IE в HTML.
Я пытаюсь разобрать сценарии из HTML-строки, что не очень сложно.
Но в моем регулярном выражении я ловлю сценарии с комментариями IE, и я не очень этого хочу.
В настоящее время мой сценарий:
function get_scripts($html){
preg_match_all('#<script(.*?)</script>#is', $html, $matches);
$scripts = "";
if(isset($matches[0]) && is_array($matches[0])){
foreach ($matches[0] as $key => $value) {
$scripts .= $value;
}
}
return $scripts;
}$html = '
<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<script type="text/javascript">
var domain_blog_json="";
</script>
';
echo get_scripts($html);
Кто-нибудь знает, как этого добиться?
Я пробовал негативно смотреть назад, но это не работает, или я (конечно) нуб в Reg Exp.
Спасибо !
<!--.*?-->|<script(.*?)<\/script>
Попробуйте это. Захватите захват. Это только даст scripts
из раздела без комментариев. См. демо.
Вы просили регулярное выражение здесь, но это не тот инструмент для анализа HTML. Вы можете использовать DOM выполнить эту задачу, которая предпочтительнее, чем пытаться изобретать колесо с помощью регулярного выражения.
$doc = DOMDocument::loadHTML('
<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<script type="text/javascript">
var domain_blog_json="";
</script>
<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
');
foreach($doc->getElementsByTagName('script') as $n) {
echo $doc->saveHTML($n);
}
Выход
<script type="text/javascript">
var domain_blog_json="";
</script>
Проверьте свое регулярное выражение, см. Вот, И я думаю, что вы можете изменить свое выражение так:
'/<script>(.*)<\/script>/U'
Ты не проверен но я думаю, что это должно исправить твое выражение.
Это должно работать, так как он захватывает только то, что находится между не-IE <script>
теги. Оглядываться назад не обязательно для этого, если вы не хотите захватить обе группы сразу или сделать что-то особенное, в частности.
(<script.+[\n<][^!][^><\/]+\n.+>)
Пример:
http://regex101.com/r/mL2gU0/3
Если вы хотите захватить теги IE, вы можете использовать: (<!--\[.+IE.+[\n<].+[^!][^><\/].+)
[пример]