我在HTML中的IE注释有点问题。 我试图从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 :(得分:1)
<!--.*?-->|<script(.*?)<\/script>
试试这个。抓住捕获。它只会从非评论部分提供scripts
。参见演示。
答案 1 :(得分: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>
答案 2 :(得分:0)
检查您的正则表达式,请参阅Here,我认为您可以将表达式修改为以下内容:
'/<script>(.*)<\/script>/U'
你没有经过考验。但我认为这应该可以解决你的正则表达式。
答案 3 :(得分:0)
这应该有效,因为它只捕获非IE <script>
标签之间的内容。除非您想要同时捕获这两个群体或特别做一些特别的事情,否则看起来并不是真的有必要。
(<script.+[\n<][^!][^><\/]+\n.+>)
示例:强>
<强> http://regex101.com/r/mL2gU0/3 强>
如果您想捕获IE标记,可以使用:(<!--\[.+IE.+[\n<].+[^!][^><\/].+)
[example]