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,}
更新:您可以使用:
$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将段落指定为分隔符,我不得不说,您的方法是在换行符上进行拆分,而不是段落。