регулярное выражение PHP

вот код

 <?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.

0

Решение

Проблема с вашим регулярным выражением в том, что вы захватываете все, кроме < один раз, но вы повторяете эту операцию несколько раз, используя группу, вызывающую некрасивую операцию регулярного выражения (это не должно привести к сбою, но у вас будет ужасная производительность).

Визуализация регулярных выражений

Итак, вы можете изменить это:

<style>([^<])+<\/style>

к

<style>([^<]+)<\/style>

Вышеупомянутое изменение улучшит регулярное выражение, имея повторение шаблона и затем захват содержимого, что, я думаю, вы хотели сделать.

Визуализация регулярных выражений

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector