【发布时间】:2017-02-17 16:31:40
【问题描述】:
我正在尝试创建一个简单的 php 函数,使其行为与 php trim() 函数相同,除了它保留一个尾随换行符(如果存在)。此外,它还需要支持保留CRLF、CR和LF的情况。
考虑以下用例:
-
myTrim(" \t \r\n 敏捷棕狐跳过懒狗\t \t ")=== "敏捷棕狐跳过懒狗" -
myTrim(" \t \r\n 敏捷棕狐跳过懒狗 \t \r\n\r\n \t \r\n ")=== "敏捷棕狐跳过懒狗\r\n" -
myTrim(" \t \r\n 敏捷棕狐跳过懒狗\t \r\r \t \r ")=== "敏捷棕狐跳过懒狗\r" -
myTrim(" \t \r\n 敏捷棕狐跳过懒狗\t \n\n \t \n ")=== "敏捷棕狐跳过懒狗\n"
我没有成功尝试过如下功能:
public static function trimMessageBlock( $block )
{
// Remove all leading whitespace (e.g. HT (9), LF (10), FF (12), CR (13), and space (32))
$block = preg_replace("/^\s+/", "", $block);
// Remove all trailing whitespace, but preserve a single trailing line break if one exists
$block = preg_replace("/\s*(\R?)\s*$/", "$1", $block);
return $block;
}
上面的代码似乎完全忽略了换行符,只匹配简单的大小写(\s*)。我能看到的唯一另一种方法是首先使用“if”语句来测试/\s*\R\s*$/ 模式,然后使用/\s*\R\s*$/ 或/\s+$/,具体取决于是否存在换行符。关于在正则表达式中执行此操作的更简单、更优雅的方法有什么建议吗?
顺便说一句,这是我在 stackoverflow 上的第一篇文章
【问题讨论】:
标签: php