2013-07-30 64 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

假设这个文本来自文件系统 –