2012-08-03 73 views
-2

我正在嘗試取文本區域值並通過正則表達式將其分割爲行。每行一句話的正則表達式

因此,如果有人寫了一個線,然後輸入和另一行,然後輸入我將與每個數組值每行一個數組

我已經到目前爲止想出的表達式是:

(.+?)\n|\G(.*) 

這是如何使用它(從網站我使用來測試表達式http://myregextester.com/

$sourcestring=" 
this is a sentense yeaa 
interesting sentense 
yet another sentese 
"; 
preg_match_all('/(.+?)\n|\G(.*)/',$sourcestring,$matches); 
echo "<pre>".print_r($matches,true); 

然而有陣列總是空的一個在1個對象nd我試圖找到一種方法來擺脫它。

謝謝先進。

+0

爲什麼不'explode()'? – Matt 2012-08-03 18:05:51

+0

我沒有想過現在爆炸那個nickb建議我可能會做但是仍然關注最後一行 – 2012-08-03 18:07:56

+0

如果你最終得到一個空字符串,忽略它。 – Matt 2012-08-03 18:08:27

回答

1

你並不需要爲這個正則表達式,只需使用explode(),就像這樣:

$lines = explode("\n", trim($input)); 

現在$lines用戶的$input將是一個數組項的每一行。

+0

nickb是否也會分裂最後一行沒有\ n在? – 2012-08-03 18:06:21

+0

不錯,編輯那裏;) – tigrang 2012-08-03 18:10:21

+0

@tigrang - 對不起,我沒有意識到你修復了這一點 - 我正在測試這在鍵盤上,並意識到我可以鞏固'array_filter($行,函數($ el){return strlen(trim $ el))> 0;});'只是'trim()',因爲額外的空白字符在開頭和結尾。但是,如果中間有空行,'array_filter()'將是必需的。 :) – nickb 2012-08-03 18:13:17

1

這將做,擺脫在陣列

explode("\n", trim($sourcestring)); 

的開始和結束的空行的見例如:http://viper-7.com/pNqtvV

+0

+1爲了在那裏獲得trim()' – nickb 2012-08-03 18:13:38

0

有各種類型的換行符。在HTML表單上下文中,您通常會收到CRLF用於行尾。一個愚蠢的爆炸會做,但正則表達式會捕獲所有變化,如果你使用\R。因此\r\n\n\r和其他人將通過進行處理:

$lines = preg_split(':\R:', $text); 

preg_split()是相當於脈動熱管爆炸()。所以你不需要使用preg_match_all