2015-11-24 75 views
0

這裏是代碼爲什麼這個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

[沒有崩潰(https://ideone.com/n6Nod8)在這裏。 –

回答

0

與您正則表達式的問題是,你正在拍攝的一切,但一個<一個單一的時間,但你通過使用組造成難看的正則表達式操作多次重複此操作(這不應該崩潰,但你必須醜陋的表現)。

Regular expression visualization

所以,你可以改變這一點:

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

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

上述更改將由本模式重複,然後捕捉的內容提高了正則表達式,這是我猜你想做。

Regular expression visualization

相關問題