0

我有以下代码:

$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 个空格开头,如果是,我想回显为“代码”,如果不是,我想回显为“非代码”。但是我得到的输出是“非代码”,尽管第 2、3 和 4 行以四个空格开头。我无法弄清楚我做错了什么。请帮我。

4

3 回答 3

2

nl2br<br />除非您告诉它,否则不会生成。你的explode逻辑是错误的。

相反,试试这个:

$data = "Normal text.......";
foreach(explode("\n",$data) as $line) {
    // your existing foreach content code here
}
于 2013-07-30T15:37:32.307 回答
1

让它工作添加了一个 trim() 来摆脱字符串前面的换行符

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 />';
        }
?>
于 2013-07-30T15:37:38.030 回答
0

您也可以使用此处定义的“startsWith”...

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

...而不是正则表达式匹配。也就是说,如果空格总是在开头

于 2013-07-30T15:39:55.980 回答