вот код
<?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! Но когда я меняю
код «/ ([^<]) +</ Стиль> / есть» в «/ [^<] +</ Стиль> / есть»
,он может работать снова, почему? Я использую xampp.
Проблема с вашим регулярным выражением в том, что вы захватываете все, кроме <
один раз, но вы повторяете эту операцию несколько раз, используя группу, вызывающую некрасивую операцию регулярного выражения (это не должно привести к сбою, но у вас будет ужасная производительность).
Итак, вы можете изменить это:
<style>([^<])+<\/style>
к
<style>([^<]+)<\/style>
Вышеупомянутое изменение улучшит регулярное выражение, имея повторение шаблона и затем захват содержимого, что, я думаю, вы хотели сделать.
Других решений пока нет …