2013-07-30 2 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-х пространств и если это я хочу повторить, как «Кодекс», и если он Безразлично 't я хочу эхо как «Не код». Но я получаю вывод как «Не код», хотя 2, 3 и 4 строки начинаются с четырех пробелов. Я не могу понять, что я сделал неправильно. Пожалуйста, помогите мне.

+7

не должно быть ';' в конце ' ' –

+2

Почему вы не используете $ data = explode ("\ n", $ data); вместо nl2br, а затем взрывается
? – MightyPork

+0

^будет соответствовать только условию, если строка начинается с & nasp – Shushant

ответ

1

получили его работы добавил накладку(), чтобы избавиться от новой строки перед строкой

nl2br заменить \n с <br />\n (или <br />\r\n), так, когда spliting на <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

Предполагая, что этот текст поступает из файловой системы –

0

Вы можете также использовать "StartsWith", как определено здесь ...

https://stackoverflow.com/a/834355/2180189

... вместо матча регулярного выражения. То есть, если пробелы всегда в начале

Смежные вопросы