正则表达式依次有多个换行符

时间:2009-06-23 19:46:30

标签: php regex

我正在尝试使用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');

5 个答案:

答案 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',
)