PHP,Regex仅在两个保留字符之间替换用户输入中的换行符

时间:2012-06-27 16:42:01

标签: php regex preg-replace

我正在处理textarea用户输入,其中保留了一些字符,例如:

[ 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”用&lt; br /&gt;替换换行符。

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

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

1 个答案:

答案 0 :(得分:3)

我会使用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);

?>

测试代码here

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