2013-07-30 103 views
0

我有以下代碼:PHP:的preg_match不工作

$data = "Normal text 
&nbsp&nbsp&nbsp&nbspcode 
&nbsp&nbsp&nbsp&nbspcode 
&nbsp&nbsp&nbsp&nbspcode 
Normal text"; 
$data = nl2br($data); 
$data= explode('<br />', $data); 
foreach($data as $value){ 
if(preg_match('/^&nbsp&nbsp&nbsp&nbsp/',$value)){ 
echo 'code'; 
echo '<br />'; 
}else{ 
echo 'Not code'; 
echo '<br />'; 
} 
} 

我要檢查,如果每一行有4個空格開始,如果它確實我想呼應的「代碼」,如果它不我不想回復爲'Not code'。但是,儘管第2,3,4行以四個空格開始,但我得到的輸出爲'Not code'。我無法弄清楚我做錯了什麼。請幫幫我。

+7

不應該有';'在' ' –

+2

末尾爲什麼不使用$ data = explode(「\ n」,$ data);而不是nl2br,然後爆炸
? – MightyPork

+0

^只會匹配條件,如果字符串以&nasp開頭 – Shushant

回答

1

得到它的工作 增加了一個裝飾()在字符串

前擺脫換行符的nl2br取代\n<br />\n(或<br />\r\n) 因此當在<br />上分開時,\n被留作第一個字符

<?php 
     $data = "Normal text 
&nbsp&nbsp&nbsp&nbspcode 
&nbsp&nbsp&nbsp&nbspcode 
&nbsp&nbsp&nbsp&nbspcode 
Normal text"; 

     $data = nl2br($data); 

     $data= explode('<br />', $data); 

     foreach($data as $value) 
     { 
       if(preg_match('/^&nbsp&nbsp&nbsp&nbsp/', trim($value))) 
       { 
         echo 'code'; 
       } 
       else 
       { 
         echo 'Not code'; 
       } 
       echo '<br />'; 
     } 
?> 
+0

謝謝你..它的工作原理 – user1763032

2

nl2br不會生成<br />,除非您告訴它。您的explode邏輯錯誤。

相反,試試這個:

$data = "Normal text......."; 
foreach(explode("\n",$data) as $line) { 
    // your existing foreach content code here 
} 
+0

出於兼容性原因,最好使用'PHP_EOL'而不是'\ n'作爲要爆炸的字符串。 –

+0

假設這個文本來自文件系統 –