Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_replace:将换行符转换为段落_Php_Regex - Fatal编程技术网

Php preg_replace:将换行符转换为段落

Php preg_replace:将换行符转换为段落,php,regex,Php,Regex,我想把换行符转换成段落 比如说 $string = "1st paragraph 2nd paragraph 3rd paragraph "; 我想 <p>1st paragraph</p> <p>2nd paragraph</p> <p>3rd paragraph</p> 变成 您可以采用另一种方法:首先用段落替换多个换行符,然后用元素替换单个换行符 $str = preg_replace('/\n(\s*\n

我想把换行符转换成段落

比如说

$string = "1st paragraph

2nd paragraph


3rd paragraph 
";
我想

<p>1st paragraph</p>
<p>2nd paragraph</p>
<p>3rd paragraph</p>
变成


您可以采用另一种方法:首先用段落替换多个换行符,然后用

元素替换单个换行符

$str = preg_replace('/\n(\s*\n)+/', '</p><p>', $str);
$str = preg_replace('/\n/', '<br>', $str);
$str = '<p>'.$str.'</p>';
另一个解决方案:

$string = preg_replace('/\n{2,}/', "</p><p>", trim($string));
$string = preg_replace('/\n/', '<br>',$string);
$string = "<p>{$string}</p>";
$string=preg_replace('/\n{2,}/',“

”,trim($string)); $string=preg_replace(“/\n/”、“
”、$string); $string=“{$string}

”;
分隔符太多。双引号分隔字符串。单引号分隔正则表达式。正斜杠后面不能跟字符串的开头。谢谢你的回答。但是我在结果中得到了这个结果,尽管
第一段

第二段

第三段

@lauthiamkok也许你想把只包含空格的行视为空行<代码>/\n(\s*\n)+/谢谢Jan-
/\n(\s*\n)+/
给出了我想要的结果。非常感谢。我注意到另一个问题:输入中的CRs。我发布的normalize()函数完成了这项工作。
echo preg_replace("'/^(.*?)(<br\s*\/?>\s*)+/'", "<p>$1</p>", nl2br($string));
$str = preg_replace('/\n(\s*\n)+/', '</p><p>', $str);
$str = preg_replace('/\n/', '<br>', $str);
$str = '<p>'.$str.'</p>';
function normalize($str) {
    // Normalize line endings
    // Convert all line-endings to UNIX format
    $s = str_replace("\r\n", "\n", $str);
    $s = str_replace("\r", "\n", $s);
    // Don't allow out-of-control blank lines
    $s = preg_replace("/\n{2,}/", "\n\n", $s);
    return $s;
}
$string = preg_replace('/\n{2,}/', "</p><p>", trim($string));
$string = preg_replace('/\n/', '<br>',$string);
$string = "<p>{$string}</p>";