2017-06-23 115 views
-2

之前,我有一個字符串,它看起來像這樣:PHP的分詞串冒號

aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet 

什麼是字符串分割成一個數組,並獲得在PHP以下結果的最佳方式?

array[0]='aaaaa: lorem ipsum'; 
array[1]='bb: dolor sit amet'; 
array[2]='ccc: no pro movet'; 

我可以編寫找到的每個的位置的函數「:」,找到字的長度之前,以及分割的字符串。但我想有一個更簡單的方法使用正則表達式?

+3

而正則表達式將幫助你在這裏,你應該問自己,如果你不應該解決了設計問題,導致你有 – Burki

+0

你到目前爲止嘗試過哪種正則表達式? –

+0

@Burki,真的,但我從外部系統獲取字符串,所以我必須以某種方式處理它。我還沒有嘗試過任何正則表達式,但我對它們並沒有太多經驗。 – johnohod

回答

3

對於這樣的工作,我將使用preg_match_all

$str = 'aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet'; 
preg_match_all('/\S+:.+?(?=\S+:|$)/', $str, $m); 
print_r($m); 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => aaaaa: lorem ipsum 
      [1] => bb: dolor sit amet 
      [2] => ccc: no pro movet 
     ) 

) 

說明:

\S+:  : 1 or more NON space followed by colon 
.+?   : 1 or more any character not greedy 
(?=\S+:|$) : lookahead, make sure we have 1 or more NON space followed by colon or end of string 
0

您所需的1調光數組可以是achi根據要求提供preg_split()

我的模式將在每個空格之後分割一個或多個小寫字母,然後是冒號,然後是空格。

代碼:(Demo

$string='aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet'; 
var_export(preg_split('/ (?=[a-z]+:)/',$string)); 

輸出:

array (
    0 => 'aaaaa: lorem ipsum', 
    1 => 'bb: dolor sit amet', 
    2 => 'ccc: no pro movet', 
)