Preg_replace - 保留换行符并清理一些文本

时间:2013-04-22 17:55:30

标签: php regex

$txt_unclean = trim(nl2br($_POST['txt_content']));
$txt_content = strip_tags($txt_unclean, '<b><i><u><br>');
$txt_br_replace = preg_replace("/[^a-zA-Z0-9 \!\,\?\.\n s]/", '', preg_replace("!(<br(?:\s?/)?>\s*){2,}!s", "<br />\n<br />\n", $txt_content));

好。所以我每次换行只允许2次换行。例如,如果有9个换行符,那么它将用两个换行符替换它。单独这样做,我获得了成功的结果。但问题是,当我想使用此正则表达式清理单词时:/[^a-zA-Z0-9 \!\,\?\.\n s]/

它基本上删除了所有换行符,但清理了单词。那么我该如何保留换行符?

例如: 我想要这个:

StackOverflow is amazing@$#@#$#@#@#@!#@@!




I KNOW!@$!##$$#!!#$@(*$09@*

根据我写的正则表达式,这应该是输出:

StackOverflow is amazing!!


I KNOW!!!!09

2 个答案:

答案 0 :(得分:0)

使用filter_var函数清理变量,链接到下面的文档。

http://php.net/manual/en/function.filter-var.php

  

它基本上删除了所有换行符,但清理了单词。所以   我该如何保留换行符?

将\ s +替换为一个“空格”。

答案 1 :(得分:0)

好的,我设法让它发挥作用。 如果有任何缺陷,请告知我。

这是我改变的变量:

$txt_br_replace = preg_replace("/[^a-zA-Z0-9 \!\,\?\.\r\n s (<br>)]/", '', preg_replace("!(<br(?:\s?/)?>\s*){2,}!s", "<br />\n<br />\n", $txt_content));