【发布时间】:2012-10-03 23:09:37
【问题描述】:
如何使用 str_replace 查找每个结尾方括号 ']' 并从结尾删除 2 个或更少的换行符。因此,如果 ] 之后有 1 或 2 个换行符,它将全部删除。如果有 3 个,你会在 ] 之后得到 1 个。 4 你最终会得到 2 等等。
感谢您的帮助
【问题讨论】:
标签: php regex line-breaks
如何使用 str_replace 查找每个结尾方括号 ']' 并从结尾删除 2 个或更少的换行符。因此,如果 ] 之后有 1 或 2 个换行符,它将全部删除。如果有 3 个,你会在 ] 之后得到 1 个。 4 你最终会得到 2 等等。
感谢您的帮助
【问题讨论】:
标签: php regex line-breaks
既然您提到了str_replace,我假设您使用的是PHP(如果是这种情况,您应该为此添加一个标签!)。并且由于您标记了正则表达式,您可能希望使用 preg_replace 来代替。那么这应该独立于平台工作:
$newstr = preg_replace('/\](?:\r\n|\n|\r){1,2}/', ']', $str);
$str 显然是您的原始字符串。
注意] 被转义了,因为它是一个特殊的正则表达式字符(用于字符类)。圆括号仅包含所有可能的换行符的列表。 ?: 是可选的,并且与需要访问捕获的子模式的复杂正则表达式更相关(实际上?: 说,不要匹配这个子模式,因为我不需要它)。 {1,2} 只是说,匹配其中的一两个。而且由于正则表达式默认是贪婪的,如果可以的话,它需要两个。
编辑:再想一想。你可以用str_replace 解决这个问题,但对于所有可能的换行符来说,一次就不太好(因为str_replace 不支持替代方案)。 This example 可能会给你一个想法。
【讨论】:
/(因为它是我选择的分隔符)。
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}/' 之类的模式并替换']'
【讨论】: