我有以下文本:
$test = 'Test This is first line
Test:123
This is Test';
我想把这个字符串分解成一组段落。我写了以下代码,但它不起作用:
$array = explode('nn', $test);
知道我在这里错过了什么吗?
您可能使用的是使用rn
而不是n
的Windows。您可以使用正则表达式使其与preg_split()
:通用
$array = preg_split('#(rn?|n)+#', $test);
模式解释:
(
:启动匹配组1rn?|n
:匹配rn
、r
或n
)
:结束匹配组1+
:重复一次或多次
如果要拆分为2个换行符,请将+
替换为{2,}
。
更新:您可能使用:
$array = preg_split('#R+#', $test);
这个宽泛的回答涵盖了R
的含义。请注意,这仅在PCRE/perl中受支持。因此,从某种意义上说,它不太适合交叉口味。
您的代码
$array = explode('nn', $test);
应将nn
用双引号括起来:
$array = explode("nn", $test);
使用单引号,它在变量$test
中查找文字nn
。使用双引号,它查找nn
的求值值,这是两个回车。
另外,请注意,行的末尾取决于主机操作系统。Windows使用rn
而不是n
。您可以使用预定义的常量PHP_EOL
来获得操作系统的行尾。
尝试双引号
$array = explode("nn", $test);
你试过这个吗?
$array = explode("n", $test);
您需要在代码中使用双引号,这样nn
实际上被计算为两行。看下面:
'Paragraph 1nnParagraph 2'
=
第1段\n\n第2段
鉴于:
"Paragraph 1nnParagraph 2"
=
第1段
第2段
此外,Windows系统使用rnrn
而不是nn
。您可以检测系统正在使用的线路终点:
PHP_EOL
所以,你的最终代码是:
$paragraphs = explode(PHP_EOL, $text);
将此文本放入数组的最简单方法是:
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';',
),
)
还要注意的是,线路馈线是不同的,这取决于环境(与windows的rn
相比,*NIX系统的n
,或者在某些情况下是简单的r
)。也许你可能也想试试explode(PHP_EOL, $text);
,