根据段落将文本分解为数组

时间:2013-07-16 09:51:42

标签: php arrays explode

我有以下文字:

$test = 'Test This is first line

Test:123

This is Test';

我想将此字符串分解为段落数组。我编写了以下代码,但它不起作用:

$array = explode('\n\n', $test);

知道我在这里缺少什么吗?

6 个答案:

答案 0 :(得分:7)

您可能在Windows上使用\r\n而不是\n。您可以使用正则表达式使preg_split()具有通用性:

$array = preg_split('#(\r\n?|\n)+#', $test);

模式说明:

  • (:开始匹配第1组
  • \r\n?|\n:匹配\r\n\r\n
  • ):结束匹配组1
  • +:重复一次或多次

如果您要分割2个换行符,请将+替换为{2,}


更新:您可以使用:

$array = preg_split('#\R+#', $test);

This extensive answer涵盖\R的含义。请注意,这仅在PCRE / perl中受支持。因此从某种意义上讲,它与交叉风味的兼容性较低。

答案 1 :(得分:3)

您的代码

$array = explode('\n\n', $test);

应将\n\n括在双引号中:

$array = explode("\n\n", $test);

使用单引号,它会在变量$test中查找文字\n\n。使用双引号,它会查找\n\n的评估值,它们是两个回车符。

另请注意,行尾取决于主机操作系统。 Windows使用\r\n而不是\n。您可以使用预定义的常量PHP_EOL来获取操作系统的行尾。

答案 2 :(得分:2)

尝试双引号

$array = explode("\n\n", $test);

答案 3 :(得分:1)

将此文本添加到您描述的数组中的最简单方法是:

preg_match_all('/.+/',$string, $array);

由于/./匹配除行终止符之外的任何字符,并且+是贪婪的,它将匹配尽可能多的字符,直到遇到换行符。
使用preg_match_all可确保每行重复此操作。当我尝试这个时,输出看起来像这样:

array (
  0 => 
  array (
    0 => '$test = \'Test This is first line',
    1 => 'Test:123',
    2 => 'This is Test\';',
  ),
)

另请注意,换行符会有所不同,具体取决于环境(* NIX系统为\n,而Windows为\r\n,有时为简单\r。也许您可能也想尝试explode(PHP_EOL, $text);

答案 4 :(得分:0)

你试过这个吗?

$array = explode("\n", $test);

答案 5 :(得分:0)

您需要在代码中使用双引号,以便\n\n实际上被评估为两行。看下面:

'Paragraph 1\n\nParagraph 2' =

第1段\ n \ n第2段

鉴于:

"Paragraph 1\n\nParagraph 2" =

第1段

第2段

此外,Windows系统使用\r\n\r\n而不是\n\n。您可以检测系统使用的行结尾:

PHP_EOL

所以,你的最终代码是:

$paragraphs = explode(PHP_EOL, $text);
相关问题