这是代码
<?php
//here is the string
$str ="<style>
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
.a{color: red;}
</style>";
$str=ycs($str);
function ycs($str){
$str = preg_replace_callback("/<style>([^<])+<\/style>/is", function($matched){
return "abc";
}, $str);
return $str;
}
echo $str;
?>
像我写的代码一样,php程序崩溃了!但是当我改变了 代码“/([^&lt;])+&lt; / style&gt; /是”到“/ [^&lt;] +&lt; / style&gt; /是” ,它可以再次运行,为什么?我使用xampp。
答案 0 :(得分:0)
你的正则表达式的问题在于你正在捕获除<
一次以外的所有内容,但是你通过使用导致丑陋的正则表达式操作的组重复此操作多次(这不应该崩溃但你会有一个丑陋的表现)。
所以,你可以改变这个:
<style>([^<])+<\/style>
要
<style>([^<]+)<\/style>
上面的更改将通过重复模式然后捕获内容来改进正则表达式,我猜你想这样做。