我有以下文字:爆炸文成數組作爲每款
$test = 'Test This is first line
Test:123
This is Test';
我想這個字符串爆炸段落的數組。我寫了下面的代碼,但它不工作:
$array = explode('\n\n', $test);
任何想法我在這裏失蹤?
我有以下文字:爆炸文成數組作爲每款
$test = 'Test This is first line
Test:123
This is Test';
我想這個字符串爆炸段落的數組。我寫了下面的代碼,但它不工作:
$array = explode('\n\n', $test);
任何想法我在這裏失蹤?
您的代碼
$array = explode('\n\n', $test);
應該有\n\n
雙引號括起來:
$array = explode("\n\n", $test);
使用單引號,它看起來通過可變$test
的文字\n\n
。使用雙引號,它會查找\n\n
這兩個回車符的評估值。
此外,請注意行的結束取決於主機操作系統。 Windows使用\r\n
而不是\n
。您可以通過使用預定義的常量PHP_EOL
來獲得操作系統的行結束。
您可能在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中受支持。所以從某種意義上說,它不太適合交叉味道。
'preg_match_all('/.+/',$ test,$ test)'仍然是一個更容易恕我直言,做OP什麼 –
@EliasVanOotegem現在好了,你說它...我專注於「分裂「idea:p如果我們想要拆分2個換行符,或者加上:)拆分解決方案已經得到更多控制。 – HamZa
公平點。由於OP指定了段落作爲分隔符,所以我不得不說你的方法是 –
嘗試雙引號
$array = explode("\n\n", $test);
最簡單的辦法像你描述會得到這個文本到一個數組:
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\';',
),
)
還要注意的是線原料是不同的,這取決於環境(\n
的* NIX系統,相比\r\n
窗戶,或者在某些情況下,簡單\r
)。也許你可能也想試試explode(PHP_EOL, $text);
,也是
你需要在你的代碼中使用雙引號,這樣\n\n
實際上被評估爲兩行。下面看:
'Paragraph 1\n\nParagraph 2'
=
第1 \ n \ nParagraph 2
鑑於:
"Paragraph 1\n\nParagraph 2"
=
第1段
第2
此外,Windows系統使用\r\n\r\n
代替\n\n
。您可以檢測該行尾系統使用:
PHP_EOL
那麼,您的最終代碼如下:
$paragraphs = explode(PHP_EOL, $text);
您是否嘗試過'\ r \ N'也許'PHP_EOL'不變? – naththedeveloper
它是否與$ test ='Test一起工作測試這是第一行\ n \ n測試:123 \ n \ n這是測試'; ?我不確定這一點,但也許你需要在將字符串定義爲變量時明確包含換行符。 – astrognocci