我有以下文字:
$test = 'Test This is first line
Test:123
This is Test';
我想将此字符串分解为段落数组。我编写了以下代码,但它不起作用:
$array = explode('\n\n', $test);
知道我在这里缺少什么吗?
答案 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);