Негативный взгляд на html комментарии с PHP для извлечения скрипта

У меня есть небольшая проблема с комментариями 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.

Спасибо !

0

Решение

<!--.*?-->|<script(.*?)<\/script>

Попробуйте это. Захватите захват. Это только даст scripts из раздела без комментариев. См. демо.

http://regex101.com/r/sU3fA2/20

1

Другие решения

Вы просили регулярное выражение здесь, но это не тот инструмент для анализа 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>
1

Проверьте свое регулярное выражение, см. Вот, И я думаю, что вы можете изменить свое выражение так:

      '/<script>(.*)<\/script>/U'

Ты не проверен но я думаю, что это должно исправить твое выражение.

0

Это должно работать, так как он захватывает только то, что находится между не-IE <script> теги. Оглядываться назад не обязательно для этого, если вы не хотите захватить обе группы сразу или сделать что-то особенное, в частности.

(<script.+[\n<][^!][^><\/]+\n.+>)

Пример:

http://regex101.com/r/mL2gU0/3


Если вы хотите захватить теги IE, вы можете использовать: (<!--\[.+IE.+[\n<].+[^!][^><\/].+) [пример]

0
По вопросам рекламы [email protected]