我正在研究一个可以存储文本的小项目。在文本内,您不允许使用html标记,可以使用htmlspecialchars()
对其进行转义。我想通过使用一些类似[code]
或[list]
的类似bbcode的标签来提供一些格式化的可能性。在这些标记中,我必须找到所有换行符\n
,<br>
或<br>\n
并将其替换。我的问题是制定找到这些的正则表达式。标签应替换为<SOMETAG>
,而换行符应替换为<SOMETHING>
。
到目前为止,这是我的代码,已经可以找到标签了。
$str = "bla bla<br> bla\n bla<br>\n bla bla [list]bla bla<br> bla\n bla<br>\n bla bla[/list] bla bla<br> bla\n bla<br>\n bla bla [list]bla bla<br> bla\n bla<br>\n bla bla[/list] bla bla<br> bla\n bla<br>\n bla bla";
echo preg_replace("/\[list\]([\s\S]*?)\[\/list\]/", "<SOMETAG>$1</SOMETAG>", $str);
使用regex101一小时后,我仍然无法解决我的问题。 这是一些测试用例:
"bla<br>" -> "bla<br>"
"bla\n" -> "bla\n"
"bla<br>\n" -> "bla<br>\n"
"[list]bla[/list]" -> "<SOMETAG>bla</SOMETAG>"
"[list]bla<br>bla<br>\nbla\nbla[/list]" -> "<SOMETAG>bla<SOMETHING>bla<SOMETHING>bla<SOMETHING>bla<SOMETAG>"
"[list]bla[/list] bla [list]bla[/list]" -> "<SOMETAG>bla</SOMETAG> bla <SOMETAG>bla</SOMETAG>"
以上$ str的输出最终应该是
bla bla<br> bla\n bla<br>\n bla bla <SOMETAG>bla bla<SOMETHING> bla<SOMETHING> bla<SOMETHING> bla bla</SOMETAG> bla bla<br> bla\n bla<br>\n bla bla <SOMETAG>bla bla<SOMETHING> bla<SOMETHING> bla<SOMETHING> bla bla</SOMETAG> bla bla<br> bla\n bla<br>\n bla bla