删除2个或更少的换行符

时间:2012-10-03 23:09:38

标签: php regex line-breaks

我如何使用str_replace查找每个结束方括号']'并从末尾删除2个或更少的换行符。所以,如果之后有1或2个换行符,那就删除全部。如果有3个,你最终会得到1。 4你最终得到2等等。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

由于您提到str_replace,我假设您使用的是PHP(如果是这种情况,您应该为其添加标记!)。由于您标记了正则表达式,因此您可能希望使用preg_replace。这应该在平台上独立工作:

$newstr = preg_replace('/\](?:\r\n|\n|\r){1,2}/', ']', $str);

其中$str显然是您的原始字符串。

请注意,]会被转义,因为它是一个特殊的正则表达式字符(用于字符类)。圆括号只包含所有可能的换行符列表。 ?:是可选的,与需要访问捕获的子模式的复杂正则表达式更相关(实际上?:表示,不匹配此子模式,因为我不需要它)。 {1,2}简单地说,匹配其中的一个或两个。而且由于默认情况下正则表达式是贪婪的,如果可以,它将需要两个。

编辑:还有一个想法。你可以用str_replace来解决这个问题,但是对于所有可能的换行符都不能很好地解决这个问题(因为str_replace不支持替代方案)。 This example可能会给你一个想法。

答案 1 :(得分:0)

str_replace

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

不支持正则表达式,你想要的是preg_replace

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

使用'/\](?:\r\n|\n|\r){0,2}/'之类的模式并替换']'