尝试使用 str_replace
$content = str_replace(array("<p> </p>\n", " <br />\n"), array('', ''), $content);
要使用正则表达式:
$content = preg_replace('/((<p\s*\/?>\s*) (<\/p\s*\/?>\s*))+/im', "<p> </p>\n", $content);
对于 BR
$content = preg_replace('/( (<br\s*\/?>\s*)|(<br\s*\/?>\s*))+/im', "<br />\n", $content);
编辑这
就是为什么你的正则表达式有效(希望你能理解一点:)):
/((\\n\s*))+/im
^ ^^^ ^^ ^^^^
| \|/ || ||\|
| | || || -- Flags
| | || |-- Regex End Character
| | || -- One or more of the preceeding character(s)
| | |-- Zero or More of the preceeding character(s)
| | -- String Character
| -- Newline Character (Escaped)
-- Regex Start Character
每个正则表达式必须以相同的字符开头和结尾。在这种情况下,我使用了正斜杠字符。
( 字符表示表达式块(要替换) 换行符是\n
。因为反斜杠在正则表达式中用作转义字符,所以您需要对其进行转义:\\n
。
字符串字符是\s
. 这将搜索一个字符串。该*
字符表示搜索 0 个或多个前面的表达式,在本例中为search for zero or more strings: \s*
.
+ 符号搜索一个或多个前面的表达式。在这种情况下,前面的表达式是(\\n\s*)
,所以只要找到该表达式一次或多次,preg_replace 函数就会找到一些东西。
我使用的标志i
表示m
case * I *nsensitive,(换行表达式并不真正需要)和 * M *ultiline - 表示表达式可以跨越多行代码,而不是代码需要在一个线。