2009-06-23 627 views
1

我试图使用PHP的split()(preg_split()也是一个选项,如果您的答案与它一起使用)在两个或多个\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

PREG_SPLIT_NO_EMPTY标志添加到preg_replace()与Tomalak的"/(\\r\\n){2,}/"的模式为我完成了这一点。

2

preg_split()应该

$pattern = "/(\\r\\n){2,}/"; 
+1

是的,因为pcre默认工作为“贪婪”,即{2,}尝试尽可能匹配尽可能多的字符,而split()将尽快停止模式匹配。 – chendral 2009-06-23 19:53:13

1

什么提出以下建议去做:

$ NB = implode(“\ r \ n”,array_filter(explode(“\ r \ n”,$ nb)));

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表示。