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

Php 根据段落将文本分解为数组,php,arrays,explode,Php,Arrays,Explode,我有以下案文: $test = 'Test This is first line Test:123 This is Test'; 我想把这个字符串分解成一个段落数组。我编写了以下代码,但它不起作用: $array = explode('\n\n', $test); 你知道我这里遗漏了什么吗?你可能在使用\r\n而不是\n的Windows上。您可以使用正则表达式使其具有以下通用性: 图案说明: (:开始匹配组1 \r\n?\n:匹配\r\n,\r或\n ):结束匹配组1 +:重复一次或多

我有以下案文:

$test = 'Test This is first line

Test:123

This is Test';
我想把这个字符串分解成一个段落数组。我编写了以下代码,但它不起作用:

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

你知道我这里遗漏了什么吗?

你可能在使用
\r\n
而不是
\n
的Windows上。您可以使用正则表达式使其具有以下通用性:

图案说明:

  • :开始匹配组1
  • \r\n?\n
    :匹配
    \r\n
    \r
    \n
  • :结束匹配组1
  • +
    :重复一次或多次
如果要按2个换行符拆分,请将
+
替换为
{2,}


更新:您可以使用:

$array = preg_split('#\R+#', $test);
介绍
\R
的含义。注意,这仅在PCRE/perl中受支持。因此,从某种意义上讲,它的跨风格兼容性较差。

您的代码

$array = explode('\n\n', $test);
应将
\n\n
括在双引号中:

$array = explode("\n\n", $test);
它使用单引号在变量
$test
中查找文本
\n\n
。使用双引号,它将查找两个回车的
\n\n
的计算值

另外,请注意,行尾取决于主机操作系统。Windows使用
\r\n
而不是
\n
。您可以通过使用预定义的常量
PHP\u EOL

尝试双引号来获取操作系统的行尾

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

你试过这个吗

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

将此文本放入您描述的数组的最简单方法是:

preg_match_all('/.+/',$string, $array);
$paragraphs = explode(PHP_EOL, $text);
由于
/./
匹配除行终止符以外的任何字符,并且
+
是贪婪的,因此它将匹配尽可能多的字符,直到遇到新行。
使用
preg\u match\u all
可确保每行也重复此操作。当我尝试此操作时,输出如下所示:

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

还请注意,换行符是不同的,这取决于环境(
\n
对于*NIX系统,与windows的
\r\n
相比,或者在某些情况下是简单的
\r
)。也许你想试试分解(PHP_EOL,$text)

您需要在代码中使用双引号,这样
\n\n
实际上被计算为两行。请看下面:

'段落1\n\n段落2'
=

第1段\n\n段落2

鉴于:

“段落1\n\n段落2”
=

第1款

第2款

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

PHP_EOL
因此,您的最终代码是:

preg_match_all('/.+/',$string, $array);
$paragraphs = explode(PHP_EOL, $text);

您是否尝试过
\r\n
PHP\u EOL
常量?它是否与$test='test这是第一行\n\nTest:123\n\n这是test'?我不确定这一点,但在将字符串定义为变量时,可能需要明确地包含换行符。
preg\u match\u all('/.+/',$test,$test)
在IMHO中仍然容易得多,并且执行操作wants@EliasVanOotegem既然你这么说了。。。我把注意力集中在“拆分”的想法上:p如果我们想拆分2个换行符或加号,拆分解决方案可以获得更多的控制权:)公平点。由于OP将段落指定为分隔符,我不得不说,您的方法是在换行符上进行拆分,而不是段落。