我正在尝试使用PHP的split()(如果你的答案适用,preg_split()也是一个选项)来分割2个或更多\r\n
的字符串。我目前的努力是:
split("(\r\n){2,}",$nb);
这个问题是每当有2个或3个\r\n
时匹配,然后继续查找下一个。对于4个或更多\r\n
来说,这是无效的。
我需要将两个或更多\r\n
个的所有实例视为与两个\r\n
相同。例如,我需要
Hello\r\n\r\nMy\r\n\r\n\r\n\r\n\r\n\r\nName is\r\nShadow
成为
array('Hello','My','Name is\r\nShadow');
答案 0 :(得分:2)
preg_split()
应
$pattern = "/(\\r\\n){2,}/";
答案 1 :(得分:1)
以下建议如何:
$ nb = implode(“\ r \ n”,array_filter(explode(“\ r \ n”,$ nb)));
答案 2 :(得分:1)
它对我有用:
$nb = "Hello\r\n\r\nMy\r\n\r\n\r\n\r\n\r\n\r\nName is\r\nShadow";
$parts = split("(\r\n){2,}",$nb);
var_dump($parts);
var_dump($parts === array('Hello','My',"Name is\r\nShadow"));
打印:
array(3) {
[0]=>
string(5) "Hello"
[1]=>
string(2) "My"
[2]=>
string(15) "Name is
Shadow"
}
bool(true)
请注意第二个测试中的double quotes以获取\r\n
所代表的字符。
答案 3 :(得分:0)
使用Tomalak的PREG_SPLIT_NO_EMPTY
模式将"/(\\r\\n){2,}/"
标志添加到preg_replace()为我完成了这个。
答案 4 :(得分:0)
\R
是跨不同操作系统匹配换行符序列的简写。您可以使用 PREG_SPLIT_NO_EMPTY
标志防止在输出数组的开头和结尾创建空元素,或者您可以在拆分之前对字符串调用 trim()
。
代码:(Demo)
$string = "\r\n\r\nHello\r\n\r\nMy\r\n\r\n\r\n\r\n\r\n\r\nName is\r\nShadow\r\n\r\n\r\n\r\n";
var_export(preg_split('~\R{2,}~', $string, 0, PREG_SPLIT_NO_EMPTY));
echo "\n---\n";
var_export(preg_split('~\R{2,}~', trim($string)));
任一技术的输出:
array (
0 => 'Hello',
1 => 'My',
2 => 'Name is
Shadow',
)