PHP,正则表达式仅在两个保留字符之间替换用户输入中的换行符


PHP, Regex replace line breaks in user input only between two reserved charcters

我正在处理一个文本区域用户输入,其中保留了一些字符,例如:

[ means <h1>
] means </h1>
{ means <p>
} means </p>

示例用户输入:

[Hello World title]
{hello worlds paragraph
and paragraph continues after line break}

示例系统显示:

<h1>Hello World title<h1>
<p>hello worlds paragraph<br/>
and paragraph continues after line break</p>

所有 HTML 标签都从用户输入中过滤掉,PHP 脚本将替换前端的这些字符。

我想使用 PHP 函数"nl2br"用
替换换行符。

问题只是{}字符之间的换行符应替换为<br />

我还需要考虑用户是否使用 {} 输入多个段落。

我会同时进行两次替换,使用 preg_replace_callback:

<?php
$input="{user input
user input}
newlines that aren't replaced";
function format_paragraph($m){
    return '<p>'.nl2br($m[1]).'</p>';
}
echo preg_replace_callback("/'{(.*)'}/s",format_paragraph,$input);
?>

在此处测试代码

此示例将添加两个 p 标记,并在一次替换中将换行符替换为