Reputation: 427
I have the following code:
$data = "Normal text
    code
    code
    code
Normal text";
$data = nl2br($data);
$data= explode('<br />', $data );
foreach ($data as $value) {
if (preg_match('/^    /', $value)) {
echo 'code<br />';
} else {
echo 'Not code<br />';
}
}
I want to check if each of the lines starts with 4 spaces and if it does I want to echo as 'Code' and if it doesn't I want to echo as 'Not code'. But I am getting the output as 'Not code' though the 2nd, 3rd and 4th lines start with four spaces. I cannot figure out what I have done wrong.
Upvotes: 0
Views: 3710
Reputation: 5846
got it working added a trim() to get rid of the newline in front of the string
nl2br replace \n
with <br />\n
(or <br />\r\n
),
so when spliting on <br />
the \n
is left as the first char
<?php
$data = "Normal text
    code
    code
    code
Normal text";
$data = nl2br($data);
$data= explode('<br />', $data );
foreach($data as $value)
{
if(preg_match('/^    /', trim($value)))
{
echo 'code';
}
else
{
echo 'Not code';
}
echo '<br />';
}
?>
Upvotes: 1
Reputation: 18861
You could also use "startsWith" as defined here...
https://stackoverflow.com/a/834355/2180189
...instead of the regexp match. That is, if the spaces are always at the beginning
Upvotes: 0
Reputation: 324620
nl2br
doesn't generate <br />
unless you tell it to. Your explode
logic is wrong.
Instead, try this:
$data = "Normal text.......";
foreach(explode("\n",$data) as $line) {
// your existing foreach content code here
}
Upvotes: 2